这个变量即是要求行中的参数,同 $query_string

$remote_port

客户真个端口

jsp的log输出变量NGINX最常用的指令备用查询 JavaScript

$content_length

要求头中的 Content-length 字段

$remote_user

已经经由 Auth Basic Module 验证的用户名

$content_type

要求头中的 Content-Type 字段

$request_filename

当前要求的文件路径,由 root 或alias指令与URI要求天生

$document_root

当前要求在 root 指令中指定的值

$scheme

HTTP方法(如http,https)

$host

要求主机头字段,否则为做事器名称

$hostname

主机名

$http_user_agent

客户端agent信息

$http_cookie

客户端cookie信息

$server_protocol

要求利用的协议,常日是HTTP/1.0或HTTP/1.1

$server_addr

做事器地址,在完成一次系统调用后可以确定这个值

$server_name

做事器名称

$server_port

要求到达做事器的端口号

$limit_rate

这个变量可以限定连接速率

$request_method

客户端要求的动作,如 GET/POST

$request_uri

包含要求参数的原始URI,不包含主机名,如:/foo/bar.php?arg=baz

$remote_addr

客户真个IP地址

$uri

不带要求参数确当前URI,$uri不包含主机名,如 /foo/bar.html

$document_uri

与 $uri 相同

$nginx_version

nginx 版本

更多全局变量查看官方文档

监听端口

server { listen 80; # 标准 HTTP 协议 listen 443 ssl; # 标准 HTTPS 协议 listen 443 ssl http2; # 对付 http2 listen [::]:80; # 利用 IPv6 在 80 上收听 # 仅收听利用 IPv6 listen [::]:80 ipv6only=on;}域名 (server_name)

server { # 监听 example.com server_name example.com; # 监听多个域 server_name example.com www.example.com; # 监听所有子域 server_name .example.com; # 监听所有顶级域 server_name example.; # 监听未指定的主机名(监听 IP 地址本身) server_name "";}负载均衡(大略实例)

upstream node_js { server 0.0.0.0:3000; server 0.0.0.0:4000; server 127.155.142.421;}负载均衡(权重)

upstream test { server localhost:8080 weight=9; server localhost:8081 weight=1;}upstream ip_hash

upstream test { ip_hash; server localhost:8080; server localhost:8081;}

办理负载均衡 session 的问题

upstream fair

upstream backend { fair; server localhost:8080; server localhost:8081;}

相应韶光短的优先分配

server 可选参数

weight

访问权重数值越高,收到要求越多

fail_timeout

指定的韶光内必须供应相应

max_fails

考试测验失落败做事器连接的最大次数

down

标记一个做事器不再接管任何要求

backup

有做事器宕机,标记的机器吸收要求

配置示例

upstream test { server 127.0.0.1:83 weight=9; # 权重 server 127.0.0.1:83 weight=1; # 权重 # 失落败超时时间 server 127.0.0.1:83 max_fails=3; server 127.0.0.1:83 weight=3 down;}upstream url_hash

upstream backend { hash $request_uri; hash_method crc32; server localhost:8080; server localhost:8081;}

按访问url的hash结果来分配要求

upstream keepalive

upstream memcached_backend { server 127.0.0.1:11211; server 10.0.0.2:11211; keepalive 32;}

激活缓存以连接到上游做事器

子文件夹中的代理

location /folder/ { # / 很主要!
proxy_pass http://127.0.0.1:3000/; # / 很主要!
proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
反向代理根本

server { listen 80; server_name example.com; location / { proxy_pass http://0.0.0.0:3000; # 个中 0.0.0.0:3000 是绑定在 # 0.0.0.0端口3000 列表上的 Node.js 做事器 }}根本 + (upstream)

upstream node_js { server 0.0.0.0:3000; # 个中 0.0.0.0:3000 是绑定在 # 0.0.0.0端口3000 列表上的 Node.js 做事器}server { listen 80; server_name example.com; location / { proxy_pass http://node_js; }}升级连接(适用于支持 WebSockets 的运用程序)

upstream node_js { server 0.0.0.0:3000;}server { listen 80; server_name example.com; location / { proxy_pass http://node_js; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; }}

适用于 Node.js、Streamlit、Jupyter 等

静态资源(传统 Web 做事器)

server { listen 80; server_name example.com; root /path/to/website; # root /www/data/ 示例,如果里面没有'root',它将探求 /www/data/index.html location / { } location /images/ { # 如果里面没有“root”,它将探求 /www/data/images/index.html } location /videos/ { # 由于里面有“root”,它会探求 /www/media/videos/index.html root /www/media; }}HTTPS 协议

大多数 SSL 选项取决于您的运用程序做什么或须要什么

server { listen 443 ssl http2; server_name example.com; ssl on; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/privkey.pem; ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /path/to/fullchain.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; add_header Strict-Transport-Security max-age=15768000;}

您可以利用 Let's Encrypt 轻松保护您的网站/运用程序。
去 lets-encrypt 获取更多信息

重定向(301永久)

将 www.example.com 重定向到 example.com

server { listen 80; server_name www.example.com; return 301 http://example.com$request_uri;}

将 http 重定向到 https

server { listen 80; server_name example.com; return 301 https://example.com$request_uri;}重定向(302临时)

server { listen 80; server_name yourdomain.com; return 302 http://otherdomain.com;}永久重定向到 HTTPS 安全域

server { listen 80; server_name yourdomain.com; return 301 https://$host$request_uri;}重定向参数

permanent

永久性重定向。
日志中的状态码为 301

redirect

临时重定向。
日志中的状态码为 302

HTTP 要求端真实的IP

location / { proxy_set_header X-Forwarded-For $remote_addr;}示例websocket 的代理 keepalive

# Upstreamsupstream backend { server 127.0.0.1:3000; keepalive 5;}# HTTP Serverserver { server_name your_hostname.com; error_log /var/log/nginx/rocketchat.access.log; location / { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; proxy_set_header X-Forward-Proto http; proxy_set_header X-Nginx-Proxy true; proxy_redirect off; }}Apache 的反向代理

server { server_name domain.tld; access_log /log/domain.tld.access.log; error_log /log/domain.tld.error.log; root /var/www/domain.tld/htdocs; # 将要求通报给 Apache 后端 location / { proxy_pass http://backend; } # 利用后备处理静态文件 location ~ \.(ogg|ogv|svg|svgz|eot|otf|woff|woff2|ttf|m4a|mp4|ttf|rss|atom|jpe?g|gif|cur|heic|png|tiff|ico|zip|webm|mp3|aac|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|swf|webp)$ { add_header "Access-Control-Allow-Origin" ""; access_log off; log_not_found off; expires max; try_files $uri @fallback; } # 如果找不到文件,则回退以将要求通报给 Apache location @fallback { proxy_pass http://backend; }}Gitlab 的反向代理

server { #侦听的80端口 listen 80; server_name git.example.cn; location / { proxy_pass http://localhost:3000; # 以下是一些反向代理的配置可删除 proxy_redirect off; # 后真个Web做事器可以通过X-Forwarded-For获取用户真实IP proxy_set_header Host $host; client_max_body_size 10m; # 许可客户端要求的最大单文件字节数 client_body_buffer_size 128k; # 缓冲区代理缓冲用户端要求的最大字节数 proxy_connect_timeout 300; # nginx跟后端做事器连接超时时间(代理连接超时) proxy_send_timeout 300; # 后端做事器数据回传韶光(代理发送超时) proxy_read_timeout 300; # 连接成功后,后端做事器相应韶光(代理吸收超时) # 设置代理做事器(nginx)保存用户头信息的缓冲区大小 proxy_buffer_size 4k; # proxy_buffers缓冲区,网页均匀在32k以下的话,这样设置 proxy_buffers 4 32k; # 高负荷下缓冲大小(proxy_buffers2) proxy_busy_buffers_size 64k; }}重定向全体网站

server { server_name old-site.com; return 301 $scheme://new-site.com$request_uri;}重定向单页

server { location = /oldpage.html { return 301 http://example.org/newpage.html; }}重定向全体子路径

location /old-site { rewrite ^/old-site/(.) http://example.org/new-site/$1 permanent;}负载均衡

upstream example { ip_hash; # upstream的负载均衡,weight是权重,可以根据机器配置定义权重。
# weigth参数表示权值,权值越高被分配到的几率越大。
server 192.168.122.11:8081 ; server 127.0.0.1:82 weight=3; server 127.0.0.1:83 weight=3 down; server 127.0.0.1:84 weight=3; max_fails=3 fail_timeout=20s; server 127.0.0.1:85 weight=4;; keepalive 32;}server { #侦听的80端口 listen 80; server_name git.example.cn; location / { # 在这里设置一个代理,和 upstream 的名字一样 proxy_pass http://example; }}
内容缓存

许可浏览器基本上永久地缓存静态内容。
Nginx 将为您设置 Expires 和 Cache-Control 头信息

location /static { root /data; expires max;}

如果哀求浏览器永久不会缓存相应(例如用于跟踪要求),请利用 -1

location = /empty.gif { empty_gif; expires -1;}跨域问题

server { listen 80; server_name api.xxx.com; add_header 'Access-Control-Allow-Origin' ''; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET,POST,HEAD'; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; } }重定向 URI 来办理跨域问题

upstream test { server 127.0.0.1:8080; server localhost:8081;}server { listen 80; server_name api.xxx.com; location / { root html; # 去要求../html文件夹里的文件 index index.html index.htm; # 首页相应地址 } # 用于拦截要求,匹配任何以 /api/开头的地址, # 匹配符合往后,停滞往下搜索正则。
location ^~/api/{ # 代表重写拦截进来的要求,并且只能对域名后边的撤除通报的参数外的字符串起浸染 # 例如www.a.com/api/msg?meth=1&par=2重写,只对/api/msg重写。
# rewrite后面的参数是一个大略的正则 ^/api/(.)$, # $1代表正则中的第一个(),$2代表第二个()的值,以此类推。
rewrite ^/api/(.)$ /$1 break; # 把要求代理到其他主机 # 个中 http://www.b.com/ 写法和 http://www.b.com写法的差异如下 # 如果你的要求地址是他 http://server/html/test.jsp # 配置一: http://www.b.com/ 后面有“/” # 将反向代理成 http://www.b.com/html/test.jsp 访问 # 配置一: http://www.b.com 后面没有有“/” # 将反向代理成 http://www.b.com/test.jsp 访问 proxy_pass http://test; # 如果 proxy_pass URL 是 http://a.xx.com/platform/ 这种情形 # proxy_cookie_path该当设置成 /platform/ / (把稳两个斜杠之间有空格)。
proxy_cookie_path /platfrom/ /; # 设置 Cookie 头通过 proxy_pass_header Set-Cookie; } }
跳转到带 www 的域上面

server { listen 80; # 配置正常的带www的域名 server_name www.wangchujiang.com; root /home/www/wabg/download; location / { try_files $uri $uri/ /index.html =404; }}server { # 将不带 www 的 wangchujiang.com # 永久性重定向到 https://www.wangchujiang.com server_name wangchujiang.com; rewrite ^(.) https://www.wangchujiang.com$1 permanent;}代理转发

upstream server-api { # api 代理做事地址 server 127.0.0.1:3110; }upstream server-resource { # 静态资源 代理做事地址 server 127.0.0.1:3120;}server { listen 3111; server_name localhost; # 这里指定域名 root /home/www/server-statics; # 匹配 api 路由的反向代理到API做事 location ^~/api/ { rewrite ^/(.)$ /$1 break; proxy_pass http://server-api; } # 假设这里验证码也在API做事中 location ^~/captcha { rewrite ^/(.)$ /$1 break; proxy_pass http://server-api; } # 假设你的图片资源全部在其余一个做事上面 location ^~/img/ { rewrite ^/(.)$ /$1 break; proxy_pass http://server-resource; } # 路由在前端,后端没有真实路由, # 路由不存在的 404 状态的页面返回 /index.html # 利用场景,用在 React/Vue项目没有真实路由 location / { try_files $uri $uri/ /index.html =404; # 空格很主要 ^ }}屏蔽 IP

可以放到 http, server, location, limit_except 语句块

include blockip.conf;

在 blockip.conf 里面输入内容,如:

deny 165.91.122.67;deny IP; # 屏蔽单个 ip 访问allow IP; # 许可单个 ip 访问deny all; # 屏蔽所有 ip 访问allow all; # 许可所有 ip 访问deny 123.0.0.0/8; # 屏蔽全体段即从 123.0.0.1 到 123.255.255.254 访问的命令deny 124.45.0.0/16; # 屏蔽IP段即从 123.45.0.1 到 123.45.255.254 访问的命令deny 123.45.6.0/24; # 屏蔽IP段即从 123.45.6.1 到 123.45.6.254 访问的命令# 如果你想实现这样的运用,除了几个IP外,其他全部谢绝allow 1.1.1.1; allow 1.1.1.2;deny all; 逼迫将 http 重定向到 https

server { listen 80; server_name example.com; rewrite ^ https://$http_host$request_uri? permanent; # 逼迫将 http 重定向到 https # 在缺点页面和“做事器”相应头字段中启用或禁用发射nginx版本。
防止黑客利用版本漏洞攻击 server_tokens off;}
代理转发连接更换

location ^~/api/upload { rewrite ^/(.)$ /wfs/v1/upload break; proxy_pass http://wfs-api;}

将地址 /api/upload 更换为 /wfs/v1/upload

爬虫 User-Agent 过滤

location / { if ($http_user_agent ~ "python|curl|java|wget|httpclient|okhttp") { return 503; } # 正常处理 # ...}图片防盗链

location ~ \.(gif|jpg|png|swf|flv)$ { root html; valid_referers none blocked .nginx.com; if ($invalid_referer) { rewrite ^/ www.nginx.cn; # return 404; }}虚拟目录配置

location /img/ { alias /var/www/image/;}# 访问 /img/ 目录里面的文件时,# 会自动去 /var/www/image/ 目录找文件location /img/ { root /var/www/image;}# 访问 /img/ 目录下的文件时,# 会去 /var/www/image/img/ 目录下找文件屏蔽文件目录

通用备份和归档文件

location ~ "\.(old|orig|original|php#|php~|php_bak|save|swo|aspx?|tpl|sh|bash|bak?|cfg|cgi|dll|exe|git|hg|ini|jsp|log|mdb|out|sql|svn|swp|tar|rdf)$" { deny all;}

谢绝访问 .git 和 .svn 目录

location ~ (.git|.svn) { deny all;}

谢绝访问隐蔽文件和目录

location ~ /\.(?!well-known\/) { deny all;}防盗图配置

location ~ \/public\/(css|js|img)\/.\.(js|css|gif|jpg|jpeg|png|bmp|swf) { valid_referers none blocked .jslite.io; if ($invalid_referer) { rewrite ^/ http://wangchujiang.com/piratesp.png; }}阻挡常见攻击base64编码的网址

location ~ "(base64_encode)(.)(\()" { deny all;}javascript eval() url

location ~ "(eval\()" { deny all;}Gzip 配置

gzip on;gzip_buffers 16 8k;gzip_comp_level 6;gzip_http_version 1.1;gzip_min_length 256;gzip_proxied any;gzip_vary on;gzip_types text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml text/javascript application/javascript application/x-javascript text/x-json application/json application/x-web-app-manifest+json text/css text/plain text/x-component font/opentype application/x-font-ttf application/vnd.ms-fontobject image/x-icon;gzip_disable "msie6";使网站不可索引

add_header X-Robots-Tag "noindex";location = /robots.txt { return 200 "User-agent: \nDisallow: /\n";}另见Nginx 安装掩护入门学习条记 (jaywcjlove.github.io)(virtubox.github.io)