这篇文章上次修改于 222 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
globa
上下文: 最外层
# 指定运行的用户和组
user www-data www-data;
# 指定进程数, 生产环境建议为物理核心数或自动
worker_processes 1;
worker_processes auto;
# 错误日志和级别 [ debug | info | notice | warn | error | crit ], stderr 表示标准错误输出
error_log logs/error.log info;
# pid
pid logs/nginx.pid;
http
上下文: http | server | location | other
没特殊需求大部分都直接配置在 http 块中即可
# 文件类型映射表, 通常未知文件默认下载
include mime.types;
default_type application/octet-stream;
# 默认编码
charset UTF-8;
# 日志格式化
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 logs/access.log main;
# 开启目录访问, 默认关闭
autoindex off;
# 上传文件需要
client_max_body_size 128G;
# 添加返回 header 内容, 也可以写进其中的 server 块内单独配置
# 跨域配置
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' '*';
# QUIC 配置
add_header Strict-Transport-Security 'max-age=31536000';
add_header Alt-Svc 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"';
add_header QUIC-Status $http3;
server
上下文: server
其中部分配置可以更低层
# HTTPS
server {
listen 80 default_server;
server_name _;
# 注意这里是 $host 而不是 $server_name
return 301 https://$host$request_uri;
}
# 端口监听
listen 443 ssl;
listen 443 quic reuseport;
# server 块对应的域名
server_name kazusa.cc;
# 配置根目录, 也可以写进下级的 location 实现多个根目录
root /www/kazusa.cc;
# 缺省首页
index index.php index.html;
# SSL
ssl_certificate conf\vhosts\cert\domain.pem;
ssl_certificate_key conf\vhosts\cert\domain-key.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
# 错误页面
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location
上下文: location
# 通常写法
location / {
# 寻找顺序: 文件 > 文件夹 > php
try_files $uri $uri/ /index.php$is_args$query_string;
}
# 某个路径单独配置根目录
location = /jsonrpc {
root /path/to/xxx;
}
# 正则匹配某些文件并做缓存
location ~* ^.+\.(ico|gif|jpg|jpeg|png|html|htm|css|js|svg|ttf|eot|otf|woff|scss|less|mp4|woff2)$ {
# 文件过期时间, -1表示不缓存
expires 3d;
}
# PHP 服务
location ~ .*\.php(\/.*)*$ {
include fastcgi.conf;
fastcgi_pass unix:/run/php/php-fpm.sock;
# 另一种
# fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
rewrite
伪静态和重写很复杂, 如果可以还是用域名和端口号来划分不同功能吧
location / {
# 几种不同的伪静态模式, 只能选择其中一种
rewrite ^/(.*)$ /$1.php last;
rewrite ^/(.*)$ /index.php/$1 last;
try_files $uri $uri/ /index.php$is_args$query_string;
}
proxy
# 配置了反代就不需要根目录了
location = /jsonrpc {
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 X-Forwarded-Proto $scheme;
# 源地址只能是 协议://主机名:端口号 这种形式
proxy_pass http://127.0.0.1:6800;
}
stream
类似于 http 但是位于网络层(http 是应用层),因此本身并不支持域名规则。
作用:反代比较特殊的流量,比如数据库和 SSH 这些。
支持 TCP 和 UDP 流量(需要使用 reuseport 复用),未完结。。。
没有评论