工作记录Nginx工作常用之Nginx
ChengZCNginx配置
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
| user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid;
events { worker_connections 1024; }
http { include /etc/nginx/mime.types; default_type application/octet-stream;
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;
server { listen 80; server_name example.com;
root /var/www/html;
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires 1y; add_header Cache-Control "public"; }
location /api { proxy_pass http://backend_server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } }
|
各个命令的作用:
user nginx;
:指定 Nginx 进程的运行用户。
worker_processes auto;
:设置 Nginx 使用的工作进程数量。
error_log /var/log/nginx/error.log;
:指定错误日志文件的路径。
pid /var/run/nginx.pid;
:指定存储 Nginx 进程 ID 的文件路径。
events
:事件模块配置,用于设置 Nginx 处理连接的方式和参数。
http
:HTTP模块配置,包含了全局的 HTTP 配置。
include /etc/nginx/mime.types;
:引入 MIME 类型配置文件。
default_type application/octet-stream;
:设置默认的 MIME 类型。
log_format
:定义日志格式。
access_log /var/log/nginx/access.log main;
:指定访问日志文件的路径和使用的日志格式。
server
:定义一个服务器块,配置一个虚拟主机。
listen 80;
:指定服务器监听的端口号。
server_name example.com;
:指定服务器的域名。
root /var/www/html;
:指定服务器的根目录。
location
:根据请求的 URI 进行不同的处理。
expires 1y;
:设置静态文件的缓存时间。
add_header Cache-Control "public";
:添加响应头,控制缓存行为。
proxy_pass
:反向代理配置,将请求转发到指定的后端服务器。
proxy_set_header
:设置代理请求头,包括 Host、X-Real-IP 和 X-Forwarded-For。
error_page
:定义错误页面的处理方式。
location = /50x.html
:指定特定错误页面的路径。
Nginx之代理
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| server { listen 443 ssl; server_name twikoo.chengzc.club; ssl_certificate /www/server/panel/vhost/ssl/1_twikoo.chengzc.club_bundle.crt; ssl_certificate_key /www/server/panel/vhost/ssl/2_twikoo.chengzc.club.key; ssl_session_timeout 5m; ssl_protocols TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;#按照这个套件配置 ssl_prefer_server_ciphers on;
location / { proxy_pass http://127.0.0.1:8082; } }
|
将请求转发到指定的后端服务器,这里将请求转发到http://127.0.0.1:8082
Nginx之SSL、跨域
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
| server { listen 80; listen 443 ssl; server_name chengzc.club; ssl_certificate /www/server/panel/vhost/ssl/1_chengzc.club_bundle.crt; ssl_certificate_key /www/server/panel/vhost/ssl/2_chengzc.club.key; ssl_session_timeout 5m; ssl_protocols TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;#按照这个套件配置 ssl_prefer_server_ciphers on; if ($scheme = http) { return 301 https://$host$request_uri; } location / { root /www/wwwroot/blog/cheng/public; index index.html index.htm; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Cookie,Set-Cookie,cookie_token'; add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'; if ($request_method = 'OPTIONS') { add_header 'Access-Control-Max-Age' 1728000; add_header 'Content-Type' 'text/plain; charset=utf-8'; add_header 'Content-Length' 0; add_header 'Access-Control-Allow-Origin' $http_origin; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Headers' '*'; } }
error_page 500 502 503 504 404 /404.html; location = /404.html { root /www/wwwroot/blog/cheng/public; } access_log /www/wwwlogs/access_blog.log; error_log /www/wwwlogs/access_blog_error.log; }
|
这段 Nginx 配置代码用于配置一个服务器块,以下是对每个命令的解释:
listen 80;
:监听80端口,处理HTTP请求。
listen 443 ssl;
:监听443端口,处理HTTPS请求,并启用SSL。
server_name chengzc.club;
:指定服务器的域名为chengzc.club
,用于匹配请求的域名。
ssl_certificate
:指定SSL证书的路径,用于加密和解密HTTPS连接。
ssl_certificate_key
:指定SSL证书的私钥路径,用于解密HTTPS连接。
ssl_session_timeout
:设置SSL会话超时时间。
ssl_protocols
:指定支持的SSL协议版本,这里设置为TLSv1.2。
ssl_ciphers
:指定支持的SSL密码套件,这里使用了一组安全的密码套件。
ssl_prefer_server_ciphers
:告诉Nginx优先使用服务器端的密码套件。
if ($scheme = http)
:如果请求是HTTP协议,则执行以下操作。
return 301 https://$host$request_uri;
:重定向HTTP请求到HTTPS。
location /
:处理根路径的请求。
root /www/wwwroot/blog/cheng/public;
:指定站点的根目录。
index index.html index.htm;
:指定默认的索引文件。
proxy_set_header
:设置代理请求头,包括Upgrade、Connection、Host、X-Real-IP、X-Forwarded-For和X-Forwarded-Proto。
add_header
:添加响应头,包括Access-Control-Allow-Origin、Access-Control-Allow-Credentials、Access-Control-Allow-Methods、Access-Control-Allow-Headers和Access-Control-Expose-Headers。
if ($request_method = 'OPTIONS')
:如果请求方法是OPTIONS,则执行以下操作。
error_page
:定义错误页面的处理方式。
location = /404.html
:处理特定的404错误页面。
access_log
:指定访问日志文件的路径。
error_log
:指定错误日志文件的路径。
这段配置主要实现了以下功能:
- 监听80端口并重定向到443端口,实现HTTP到HTTPS的重定向。
- 配置HTTPS连接,使用SSL证书进行加密。
- 设置站点根目录和默认索引文件。
- 配置反向代理,并设置一些代理请求头。
- 添加跨域请求的响应头。
- 处理错误页面和日志记录。
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
| map $arg_url $proxy_host { ~*^https?://([^/:]+) $1; default ""; }
server { listen 443 ssl; server_name xxx.chengzc.club; resolver 8.8.8.8; ssl_certificate /www/server/panel/vhost/ssl/1_xxx.chengzc.club_bundle.crt; ssl_certificate_key /www/server/panel/vhost/ssl/2_xxx.chengzc.club.key; ssl_session_timeout 5m; ssl_protocols TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_prefer_server_ciphers on; access_log /www/wwwlogs/access_xxx.log; error_log /www/wwwlogs/access_error.log;
}
location / { proxy_pass $arg_url; proxy_set_header Referer "https://servicewechat.com"; add_header 'Access-Control-Allow-Origin' $http_origin; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Cookie,Set-Cookie,cookie_token'; add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'; } }
|
这段 Nginx 配置代码包含了一个 map
块和一个服务器块,以下是对每个命令的解释:
map $arg_url $proxy_host
:定义一个变量映射,根据 $arg_url
的值设置 $proxy_host
的值。正则表达式 ~*^https?://([^/:]+) $1
用于从 $arg_url
中提取主机名。
default ""
:如果没有匹配到任何值,则将 $proxy_host
设置为空字符串。
listen 443 ssl;
:监听443端口,处理HTTPS请求,并启用SSL。
server_name xxx.chengzc.club;
:指定服务器的域名为 xxx.chengzc.club
,用于匹配请求的域名。
resolver 8.8.8.8;
:指定用于解析主机名的DNS服务器。
ssl_certificate
:指定SSL证书的路径,用于加密和解密HTTPS连接。
ssl_certificate_key
:指定SSL证书的私钥路径,用于解密HTTPS连接。
ssl_session_timeout
:设置SSL会话超时时间。
ssl_protocols
:指定支持的SSL协议版本,这里设置为TLSv1.2。
ssl_ciphers
:指定支持的SSL密码套件,这里使用了一组安全的密码套件。
ssl_prefer_server_ciphers
:告诉Nginx优先使用服务器端的密码套件。
access_log
:指定访问日志文件的路径。
error_log
:指定错误日志文件的路径。
location /
:处理根路径的请求。
proxy_pass $arg_url;
:将请求转发到由 $arg_url
指定的后端服务器。
proxy_set_header
:设置代理请求头,包括Referer。
add_header
:添加响应头,包括Access-Control-Allow-Origin、Access-Control-Allow-Credentials、Access-Control-Allow-Methods、Access-Control-Allow-Headers和Access-Control-Expose-Headers。
这段配置主要实现了以下功能:
- 根据请求参数
$arg_url
提取主机名,并将其赋值给变量 $proxy_host
。
- 监听443端口,处理HTTPS请求,并启用SSL加密。
- 配置SSL证书和私钥的路径。
- 设置SSL会话超时时间和支持的SSL协议版本。
- 配置SSL密码套件。
- 设置访问日志和错误日志的路径。
- 将请求转发到由
$arg_url
指定的后端服务器。
- 设置代理请求头和响应头,包括Referer和跨域请求的相关头部。
引入更多配置
1
| include /www/server/panel/vhost/nginx/*.conf;
|