1 简介
Nginx 是一个 HTTP Web 服务器、反向代理、 内容缓存、负载均衡器、 TCP/UDP 代理服务器、 和邮件代理服务器。
- Nginx 官网:
https://nginx.org
2 安装
2.1 CentOS 9 环境
2.1.1 Docker 方式
- 环境依赖:
- Docker 安装:参考 《Docker 使用手册》
- 进入云服务器终端:参考 《云服务器购买和使用手册》
- ./conf/nginx.conf:挂载配置文件
- ./conf/certs:存放 SSH 证书
- ./docker-compose.yml:容器构建文件
1# 1 创建文件夹,用来存放 外部挂载文件
2mkdir -p /usr/local/src/nginx/conf/certs
3mkdir -p /usr/local/src/nginx/logs
4mkdir -p /usr/local/src/nginx/html
5cd /usr/local/src/nginx
6
7
8
9# 2 准备挂载文件
10# 创建挂载配置文件 ./conf/nginx.conf
11# SSH证书存放到 ./conf/certs
12# 创建容器构建文件 ./docker-compose.yml
13
14
15
16# 3 创建启动容器
17docker compose up -d
2.1.1.1 挂载配置文件
./conf/nginx.conf:
1worker_processes 1;
2
3events {
4 worker_connections 1024;
5}
6
7http {
8 include mime.types;
9 default_type application/octet-stream;
10
11 sendfile on;
12
13 keepalive_timeout 65;
14
15 proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:100m inactive=60m max_size=1g use_temp_path=off;
16
17 # 开启gzip
18 gzip on;
19 gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
20 gzip_min_length 1024; # 设置最小压缩数据大小,小于该值的数据将不进行压缩
21 gzip_comp_level 5; # 设置压缩级别,1 为最快压缩,9 为最高压缩率(建议设置为 4~6)
22
23 gzip_buffers 16 8k; # 设置用于存储压缩数据的缓冲区数量和大小
24 gzip_http_version 1.1; # 仅对支持 HTTP/1.1 或更高版本的客户端启用 Gzip 压缩
25 gzip_vary on; # 启用 Vary 响应头,告知缓存代理服务器对不同编码方式进行缓存分离处理
26 gzip_static on; # 启用对预生成 .gz 文件的直接传输支持,减少服务器实时压缩负担
27 gzip_disable "msie6"; # 禁用对特定客户端(如 IE6)的 Gzip 支持,避免兼容性问题
28 gzip_proxied any; # 指定在代理场景下是否启用压缩(如 any 表示对所有请求启用压缩)
29
30
31 upstream blog_server {
32 ip_hash;
33 server 172.17.0.1:81 max_fails=3 fail_timeout=30s;
34
35 keepalive 32; # 保持连接数,减少每次请求的连接开销
36
37 # max_fails 服务器失败的最大次数
38 # fail_timeout 每台服务器失败的超时时间
39 }
40
41 upstream twikoo_server {
42 ip_hash;
43 server 172.17.0.1:82 max_fails=3 fail_timeout=30s;
44
45 keepalive 32;
46 }
47
48 upstream ctw_server {
49 ip_hash;
50 server 172.17.0.1:90 max_fails=3 fail_timeout=30s;
51
52 keepalive 32;
53 }
54
55 server {
56 listen 80;
57 server_name templechann.com www.templechann.com climbtw.com www.climbtw.com;
58 # rewrite ^(.*)$ https://$server_name$1 permanent; # permanent,301 永久重定向,更新 url
59 return 301 https://$server_name$request_uri; # 重定向使用 return 效率更高
60 }
61
62 # 通过 ip 访问的话,优先匹配 显式标记为 default_server 的 server,如果没有则 使用第一个 server
63 # 这里设置下,通过 ip 访问的话,跳到博客容器
64 server {
65 listen 80 default_server;
66 server_name _;
67 # rewrite ^(.*)$ https://$server_name$1 permanent; # permanent,301 永久重定向,更新 url
68 return 301 https://templechann.com$request_uri; # 重定向使用 return 效率更高
69 }
70
71 server {
72 listen 443 ssl;
73 server_name templechann.com www.templechann.com;
74
75 ssl_certificate /etc/nginx/certs/templechann.com_bundle.pem;
76 ssl_certificate_key /etc/nginx/certs/templechann.com.key;
77
78 ssl_session_cache shared:SSL:1m;
79
80 ssl_session_timeout 5m;
81 # 请按照以下协议配置
82 ssl_protocols TLSv1.2 TLSv1.3;
83 # 请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
84 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
85 ssl_prefer_server_ciphers on;
86
87 # 系统临时维护
88 # rewrite ^(.*)$ /maintainace.html break; # break,地址栏 url 不变
89 # location = /maintainace.html {
90 # root html;
91 # }
92
93 # location / {
94 # root html;
95 # # try_files $uri $uri/ /index.html; # 解决单页应用 history 路由 404 的问题
96 # index index.html index.htm;
97 # }
98
99 # 反向代理
100 location / {
101 proxy_pass http://blog_server;
102
103 proxy_cache my_cache;
104 proxy_set_header Host $host;
105 proxy_set_header X-Real-IP $remote_addr;
106 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
107 proxy_set_header X-Forwarded-Proto $scheme;
108 }
109
110 error_page 500 502 503 504 /50x.html;
111 location = /50x.html {
112 root html;
113 }
114
115 # error_page 404 /404.html;
116 # location = /404.html {
117 # root html;
118 # }
119 }
120
121 server {
122 listen 443 ssl;
123 server_name xxx.templechann.com;
124
125 ssl_certificate /etc/nginx/certs/xxx.templechann.com_bundle.pem;
126 ssl_certificate_key /etc/nginx/certs/xxx.templechann.com.key;
127
128 ssl_session_cache shared:SSL:1m;
129
130 ssl_session_timeout 5m;
131 # 请按照以下协议配置
132 ssl_protocols TLSv1.2 TLSv1.3;
133 # 请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
134 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
135 ssl_prefer_server_ciphers on;
136
137 # 系统临时维护
138 # rewrite ^(.*)$ /maintainace.html break; # break,地址栏 url 不变
139 # location = /maintainace.html {
140 # root html;
141 # }
142
143 # 反向代理
144 location / {
145 proxy_pass http://twikoo_server;
146
147 proxy_cache my_cache;
148 proxy_set_header Host $host;
149 proxy_set_header X-Real-IP $remote_addr;
150 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
151 proxy_set_header X-Forwarded-Proto $scheme;
152 }
153
154 error_page 500 502 503 504 /50x.html;
155 location = /50x.html {
156 root html;
157 }
158 }
159
160 server {
161 listen 443 ssl;
162 server_name climbtw.com www.climbtw.com;
163
164 ssl_certificate /etc/nginx/certs/climbtw.com_bundle.pem;
165 ssl_certificate_key /etc/nginx/certs/climbtw.com.key;
166
167 ssl_session_cache shared:SSL:1m;
168
169 ssl_session_timeout 5m;
170 #请按照以下协议配置
171 ssl_protocols TLSv1.2 TLSv1.3;
172 #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
173 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
174 ssl_prefer_server_ciphers on;
175
176 # 系统临时维护
177 # rewrite ^(.*)$ /maintainace.html break; # break,地址栏 url 不变
178 # location = /maintainace.html {
179 # root html;
180 # }
181
182 # 反向代理
183 location / {
184 proxy_pass http://ctw_server;
185
186 proxy_cache my_cache;
187 proxy_set_header Host $host;
188 proxy_set_header X-Real-IP $remote_addr;
189 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
190 proxy_set_header X-Forwarded-Proto $scheme;
191 }
192
193 error_page 500 502 503 504 /50x.html;
194 location = /50x.html {
195 root html;
196 }
197 }
198}
2.1.1.2 容器构建文件
./docker-compose.yml:
1version: '3'
2
3services:
4 nginx:
5 image: nginx:alpine-slim
6 container_name: nginx
7 restart: always
8 ports:
9 - "80:80"
10 - "443:443"
11 volumes:
12 # 配置文件挂载
13 - ./conf/nginx.conf:/etc/nginx/nginx.conf
14 # SSL 证书
15 - ./conf/certs:/etc/nginx/certs
16 # 日志
17 - ./logs:/var/log/nginx
18 # 网站根目录(把你的静态网站放这里)
19 - ./html:/usr/share/nginx/html
20 # 解决 alpine 权限 403 问题
21 user: root
22
23 # 可选:加入时区,保证日志时间正确
24 environment:
25 - TZ=Asia/Shanghai