Nginx

Nginx 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。第一个公开版本发布于2004年10月4日。其源代码以类BSD许可证的形式发布,因稳定性、丰富的功能,低系统资源的消耗而闻名

一份简单的 Nginx 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# nginx 以哪个用户启动
user nginx;

# worker 进程数量,默认为自动。建议设置为实际机器的CPU核心数量
worker_processes auto;

# 错误日志存储位置
error_log /var/log/nginx/error.log;

# 主 nginx 进程ID存储位置
pid /run/nginx.pid;

# 将目录中的文件,加载到此处
include /usr/share/nginx/modules/*.conf;

events {
# 每个 worker 同时的最大连接数
worker_connections 1024;
}

# http 协议,也可以是 tcp udp 等
http {
# 日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

# 访问日志存储位置
access_log /var/log/nginx/access.log main;

# 减少网络传输的步骤切换和拷贝,提高性能
sendfile on;

tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;

include /etc/nginx/mime.types;
default_type application/octet-stream;

# 监听
server {
listen 80;
server_name code.println.org;
# 路由正则被匹配后,则会进入该段
location ^~ / {
# 反向代理到其他地址
proxy_pass https://127.0.0.1:8080$request_uri;
}
}

server {
# 监听80端口
listen 80;
# 直接响应到443去,即强制https
return 301 https://println.org$request_uri;
}

server {
# 监听443端口,并启用http3
listen 443 ssl http2 default_server;
# 启用http并设置为默认虚拟,即直接访问ip时,加载本虚拟主机
listen [::]:443 ssl http2 default_server;
# 本虚拟主机的域名
server_name println.org alex.println.org www.println.org;
# 本虚拟主机的默认文件,即直接访问目录时,默认加载的文件
index index.html;
# 本监听的网站根目录
root /opt/alex-tech/public;

# 使用gzip压缩网络传输内容提及,借此提高性能
gzip on;
gzip_buffers 32 4K;
gzip_comp_level 6;
gzip_min_length 100;
# 对哪些类型的文件使用 gzip
gzip_types application/javascript text/css text/xml;
gzip_vary on;

# 符合正则的将会被反向代理
location ^~ /url/ {
proxy_pass http://127.0.0.1:7001$request_uri;
}

# 对某些扩展名的文件配置缓存,不再从新请求
location ~ .*\.(ico|js|css|png|jpg|jpeg|pdf)$ {
expires 168h;
}

# ssl 配置
ssl_certificate /etc/letsencrypt/live/println.org/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/println.org/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

# 设置各种状态码时的错误页面,可以是文件也可以是链接
error_page 400 401 403 404 https://println.org/404.html;
error_page 500 502 503 504 https://println.org/500.html;
}
}