nginx大道至簡之反向代理

後端大佬-明哥哥發表於2020-09-24

  • 優點:
  1. 保護了真實的web伺服器,web伺服器對外不可見,外網只能看到反向代理伺服器,而反向代理伺服器上並沒有真實資料,因此,保證了web伺服器的資源安全。
  2. 反向代理為基礎產生了動靜資源分離以及負載均衡的方式,減輕web伺服器的負擔,加速了對網站訪問速度
  3. 節約了有限的IP地址資源,企業內所有的網站共享一個在internet中註冊的IP地址,這些伺服器分配私有地址,採用虛擬主機的方式對外提供服務

nginx.conf 配置

#cpu核心
worker_processes 1;
#event
events {
    worker_connections 2048;
    multi_accept on;
    use epoll;
}
# proxy
proxy_connect_timeout 10;
proxy_read_timeout 180;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 16k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 96k;
proxy_cache_path /var/www/vhosts/xxxxx/www/assets levels=1:2 keys_zone=cache_ming:10m inactive=1d max_size=10g use_temp_path=off;
#負載均衡 單機測試
upstream ming {
    server 127.0.0.1:10089 weight=1;
}

域名conf配置

#負載均衡 + 反向代理
server {
    listen       80 ;
    server_name   xxx.com;
    #gzip
    gzip on;
    gzip_min_length 2k;
    gzip_buffers   4 32k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types text/plain text/css text/javascript application/json application/x-javascript application/xml image/png image/jpeg;
    gzip_vary on;
    #utf8
    charset utf-8;
    #字型快取代理
    location /font/ {
        proxy_pass  http://ming;
        proxy_redirect off;
        proxy_cache_revalidate on;
        proxy_cache_min_uses 1;
        proxy_set_header Host $host;
        proxy_cache cache_one;
        proxy_cache_valid 200 302 1h;
        proxy_cache_valid 301 304 1h;
        proxy_cache_valid any 1h;
        proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
        proxy_cache_background_update on;
        proxy_cache_lock on;
        proxy_cache_key  $scheme$host$uri$args;  #設定快取的key
        # proxy_cache_methods GET HEAD POST;  #允許快取post請求
        proxy_cache_methods GET HEAD; 
        proxy_set_header  X-Real-IP $remote_addr;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        expires 1h; #選填
        add_header wall  "Hi, Guys. My name is Ming GeGe."; #檢視快取命中與否
        add_header X-Cache-Status $upstream_cache_status;  #檢視快取命中狀態
    }
    #清除nginx快取
    location ~ /purge(/.*) {
        allow 127.0.0.1;    #只允許本機訪問
        deny all;   #拒絕外部訪問
        proxy_cache_purge cache_one $scheme$host$uri$args;
    }
    #網站路徑
    root /var/www/vhosts/xxxx.com/www;
    location / {
        try_files $uri $uri /index.php?$args;
    }
    #php
    location ~ .php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index /index.php;
        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_read_timeout 300;
    }
}
#源服務
server {
    listen       10089;
    server_name  127.0.0.1;
    #指向路徑
    root   /var/www/vhosts/xxxx.com/www/assets;
}

效果:

  1. 請求:xxx.com/font/xxx
  2. 刪除: font/下檔案
  3. 請求:xxx.com/font/xxx,沒變化表示快取成功

相關文章