国产成人精品999视频&日本一区二区亚洲人妻精品&久久久精品国产99久久精&99热这里只有成人精品国产&精品国产剧情av一区二区&成人亚洲精品久久久久app&国产精品美女高潮抽搐A片

NGINX 備忘清單

這個 nginx 快速參考備忘單顯示了它的常用命和配置使用清單。

入門

服務(wù)管理

sudo systemctl status nginx # nginx當(dāng)前狀態(tài)
sudo systemctl reload nginx # 重新加載 nginx
sudo systemctl restart nginx # 重啟nginx

sudo nginx -t   # 檢查語法
nginx           # 啟動
nginx -s reload # 重啟
nginx -s stop   # 關(guān)閉進(jìn)程
nginx -s quit   # 平滑關(guān)閉nginx
nginx -V        # 查看nginx的安裝狀態(tài),

Docker 安裝

docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx

簡單代理

location / {
  proxy_pass http://127.0.0.1:3000;
  proxy_redirect      off;
  proxy_set_header    Host $host;
}

全局變量

變量說明
$args這個變量等于請求行中的參數(shù),同 $query_string
$remote_port客戶端的端口
$content_length請求頭中的 Content-length 字段
$remote_user已經(jīng)經(jīng)過 Auth Basic Module 驗證的用戶名
$content_type請求頭中的 Content-Type 字段
$request_filename當(dāng)前請求的文件路徑,由 root 或alias指令與URI請求生成
$document_root當(dāng)前請求在 root 指令中指定的值
$schemeHTTP方法(如http,https)
$host請求主機(jī)頭字段,否則為服務(wù)器名稱
$hostname主機(jī)名
$http_user_agent客戶端agent信息
$http_cookie客戶端cookie信息
$server_protocol請求使用的協(xié)議,通常是HTTP/1.0HTTP/1.1
$server_addr服務(wù)器地址,在完成一次系統(tǒng)調(diào)用后可以確定這個值
$server_name服務(wù)器名稱
$server_port請求到達(dá)服務(wù)器的端口號
$limit_rate這個變量可以限制連接速率
$request_method客戶端請求的動作,如 GET/POST
$request_uri包含請求參數(shù)的原始URI,不包含主機(jī)名,如:/foo/bar.php?arg=baz
$remote_addr客戶端的IP地址
$uri不帶請求參數(shù)的當(dāng)前URI,$uri不包含主機(jī)名,如 /foo/bar.html
$document_uri$uri 相同
$nginx_versionnginx 版本

更多全局變量查看官方文檔

監(jiān)聽端口

server {
  listen 80;      # 標(biāo)準(zhǔn) HTTP 協(xié)議
  listen 443 ssl; # 標(biāo)準(zhǔn) HTTPS 協(xié)議
  listen 443 ssl http2; # 對于 http2
  listen [::]:80; # 使用 IPv6 在 80 上收聽
  # 僅收聽使用 IPv6
  listen [::]:80 ipv6only=on;
}

域名 (server_name)

server {
  # 監(jiān)聽 example.com
  server_name example.com;
  # 監(jiān)聽多個域
  server_name example.com www.example.com;
  # 監(jiān)聽所有子域
  server_name *.example.com;
  # 監(jiān)聽所有頂級域
  server_name example.*;
  # 監(jiān)聽未指定的主機(jī)名(監(jiān)聽 IP 地址本身)
  server_name "";
}

負(fù)載均衡(簡單實例)

upstream node_js {
  server 0.0.0.0:3000;
  server 0.0.0.0:4000;
  server 127.155.142.421;
}

負(fù)載均衡(權(quán)重)

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;
}

解決負(fù)載均衡 session 的問題

upstream fair

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

響應(yīng)時間短的優(yōu)先分配

server 可選參數(shù)

:-:-
weight訪問權(quán)重數(shù)值越高,收到請求越多
fail_timeout指定的時間內(nèi)必須提供響應(yīng)
max_fails嘗試失敗服務(wù)器連接的最大次數(shù)
down標(biāo)記一個服務(wù)器不再接受任何請求
backup有服務(wù)器宕機(jī),標(biāo)記的機(jī)器接收請求

配置示例

upstream test {
  server 127.0.0.1:83 weight=9; # 權(quán)重
  server 127.0.0.1:83 weight=1; # 權(quán)重
  # 失敗超時時間
  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結(jié)果來分配請求

upstream keepalive

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

激活緩存以連接到上游服務(wù)器

子文件夾中的代理

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;
}

反向代理

基礎(chǔ)

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 服務(wù)器
  }
}

基礎(chǔ) + (upstream)

upstream node_js {
  server 0.0.0.0:3000;
  # 其中 0.0.0.0:3000 是綁定在 
  # 0.0.0.0端口3000 列表上的 Node.js 服務(wù)器
}

server {
  listen 80;
  server_name example.com;
  
  location / {
    proxy_pass http://node_js;
  }
}

升級連接(適用于支持 WebSockets 的應(yīng)用程序)

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 等

靜態(tài)資源(傳統(tǒng) Web 服務(wù)器)

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 協(xié)議

大多數(shù) SSL 選項取決于您的應(yīng)用程序做什么或需要什么

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 輕松保護(hù)您的網(wǎng)站/應(yīng)用程序。去 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;
}

重定向參數(shù)

:-:-
permanent永久性重定向。日志中的狀態(tài)碼為 301
redirect臨時重定向。日志中的狀態(tài)碼為 302

HTTP 請求端真實的IP

location / {
  proxy_set_header X-Forwarded-For $remote_addr;
}

示例

websocket 的代理 keepalive

# Upstreams
upstream backend {
    server 127.0.0.1:3000;
    keepalive 5;
}
# HTTP Server
server {
  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;
  }
  # 使用后備處理靜態(tài)文件
  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服務(wù)器可以通過X-Forwarded-For獲取用戶真實IP
    proxy_set_header           Host $host;
    client_max_body_size       10m;  # 允許客戶端請求的最大單文件字節(jié)數(shù)
    client_body_buffer_size    128k; # 緩沖區(qū)代理緩沖用戶端請求的最大字節(jié)數(shù)
    proxy_connect_timeout      300;  # nginx跟后端服務(wù)器連接超時時間(代理連接超時)
    proxy_send_timeout         300;  # 后端服務(wù)器數(shù)據(jù)回傳時間(代理發(fā)送超時)
    proxy_read_timeout         300;  # 連接成功后,后端服務(wù)器響應(yīng)時間(代理接收超時)
    # 設(shè)置代理服務(wù)器(nginx)保存用戶頭信息的緩沖區(qū)大小
    proxy_buffer_size          4k;
    # proxy_buffers緩沖區(qū),網(wǎng)頁平均在32k以下的話,這樣設(shè)置
    proxy_buffers              4 32k;
    # 高負(fù)荷下緩沖大?。╬roxy_buffers*2)
    proxy_busy_buffers_size    64k;
  }
}

重定向整個網(wǎng)站

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;
}

負(fù)載均衡

upstream example {
  ip_hash;
  # upstream的負(fù)載均衡,weight是權(quán)重,可以根據(jù)機(jī)器配置定義權(quán)重。
  # weigth參數(shù)表示權(quán)值,權(quán)值越高被分配到的幾率越大。
  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 / {
    # 在這里設(shè)置一個代理,和 upstream 的名字一樣
    proxy_pass   http://example;
  }
}

內(nèi)容緩存

允許瀏覽器基本上永久地緩存靜態(tài)內(nèi)容。 Nginx 將為您設(shè)置 Expires 和 Cache-Control 頭信息

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

如果要求瀏覽器永遠(yuǎn)不會緩存響應(yīng)(例如用于跟蹤請求),請使用 -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;  # 首頁響應(yīng)地址
  }
  # 用于攔截請求,匹配任何以 /api/開頭的地址,
  # 匹配符合以后,停止往下搜索正則。
  location ^~/api/{ 
    # 代表重寫攔截進(jìn)來的請求,并且只能對域名后邊的除去傳遞的參數(shù)外的字符串起作用
    # 例如www.a.com/api/msg?meth=1&par=2重寫,只對/api/msg重寫。
    # rewrite后面的參數(shù)是一個簡單的正則 ^/api/(.*)$,
    # $1代表正則中的第一個(),$2代表第二個()的值,以此類推。
    rewrite ^/api/(.*)$ /$1 break;
    
    # 把請求代理到其他主機(jī) 
    # 其中 http://www.b.com/ 寫法和 http://www.b.com寫法的區(qū)別如下
    # 如果你的請求地址是他 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應(yīng)該設(shè)置成 /platform/ / (注意兩個斜杠之間有空格)。
    proxy_cookie_path /platfrom/ /;

    # 設(shè)置 Cookie 頭通過
    proxy_pass_header Set-Cookie;
  } 
}

跳轉(zhuǎn)到帶 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;
}

代理轉(zhuǎn)發(fā)

upstream server-api {
  # api 代理服務(wù)地址
  server 127.0.0.1:3110;    
}
upstream server-resource {
  # 靜態(tài)資源 代理服務(wù)地址
  server 127.0.0.1:3120;
}
server {
  listen       3111;
  server_name  localhost; # 這里指定域名
  root /home/www/server-statics;
  # 匹配 api 路由的反向代理到API服務(wù)
  location ^~/api/ {
      rewrite ^/(.*)$ /$1 break;
      proxy_pass http://server-api;
  }
  # 假設(shè)這里驗證碼也在API服務(wù)中
  location ^~/captcha {
      rewrite ^/(.*)$ /$1 break;
      proxy_pass http://server-api;
  }
  # 假設(shè)你的圖片資源全部在另外一個服務(wù)上面
  location ^~/img/ {
      rewrite ^/(.*)$ /$1 break;
      proxy_pass http://server-resource;
  }
  # 路由在前端,后端沒有真實路由,
  # 路由不存在的 404 狀態(tài)的頁面返回 /index.html
  # 使用場景,用在 React/Vue項目沒有真實路由
  location / {
    try_files $uri $uri/ /index.html =404;
    #                      空格很重要 ^
  }
}

屏蔽 IP

可以放到 http, server, location, limit_except 語句塊

include blockip.conf;

blockip.conf 里面輸入內(nèi)容,如:

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 訪問的命令

# 如果你想實現(xiàn)這樣的應(yīng)用,除了幾個IP外,其他全部拒絕
allow 1.1.1.1; 
allow 1.1.1.2;
deny all; 

強(qiáng)制將 http 重定向到 https

server {
  listen       80;
  server_name  example.com;
  rewrite ^ https://$http_host$request_uri? permanent; # 強(qiáng)制將 http 重定向到 https
  # 在錯誤頁面和“服務(wù)器”響應(yīng)頭字段中啟用或禁用發(fā)射nginx版本。 防止黑客利用版本漏洞攻擊
  server_tokens off;
}

代理轉(zhuǎn)發(fā)連接替換

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編碼的網(wǎng)址

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";

使網(wǎng)站不可索引

add_header X-Robots-Tag "noindex";

location = /robots.txt {
  return 200 "User-agent: *\nDisallow: /\n";
}

另見