Nginx反向代理最常見的三種用法,建議收藏

說到 大名鼎鼎的 Nginx, 大家肯定都不陌生,不管是做運維,做開發,還是做網路的都應該對他很熟悉。Nginx的功能很多,很強大,今天我主要是分享一下 Nginx 反向代理的常見用法。

什麼是反向代理?

舉個例子: 比如使用者去訪問百度,使用者在瀏覽器輸入www。baidu。com時,對於百度來說,瀏覽器就是客戶端。 客戶端將請求傳送到百度的代理伺服器,由代理伺服器去選擇目標伺服器獲取資料後,在返回給客戶端。 這樣做有三個好處: 1、隱藏了目標伺服器IP地址,暴露出去的只是代理伺服器 2、訪問量很大的時候可以輕鬆擴容,目標伺服器可以有很多個 3、客戶端對代理是無感知的,客戶端不需要任何配置就可以訪問

看下面這張圖 可能更直觀一些

Nginx  反向代理最常見的三種用法,建議收藏

現在來看一些Nginx 反向代理的實戰用法:

1、Nginx 反代 websocket

server { listen 80; server_name XXXXX; location / { proxy_pass http://192。168。10。100:9504; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1。1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection “upgrade”; }} # 這裡需要注意的是 proxy_http_version 1。1; 這個引數很重要 # 因為Nginx對HTTP的反向代理,預設使用HTTP 1。0連線到後端,那樣沒法保持長連線,後端作出HTTP響應後,連線就斷了,而websocket是長連線,所以啟用HTTP 1。1以支援長連線

2、nginx 七層 反向代理

# 七層就是應用層 例子1: 經典的LNMP #在nginx 中新增如下配置: location ~ \。php$ { fastcgi_pass 127。0。0。1:9000; fastcgi_index index。php; include fastcgi。conf; }# 表示把以php 結尾的請求都轉發到 127。0。0。1:9000 即 我設定的php-fpm 預設埠 例子2: 傳參式location ~ ^/api/(。*)$ { proxy_pass http://127。0。0。1:9901/$1; 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_pass 可以包含傳輸協議、主機名稱或IP地址加埠號,URI等 # http://127。0。0。1:9901/$1 這裡的 $1 就是我透過介面傳進來的引數

3、nginx 四層反向代理

# 四層是網路層,例子:允許某個IP 可以連線內網的mysql 資料庫stream { upstream mysqldb { hash $remote_addr consistent; # $binary_remote_addr; server 172。18。1。101:3306; } server { listen 3306; allow x。x。x。0/24; deny all; proxy_connect_timeout 10s; proxy_timeout 900s;#設定客戶端和代理服務之間的超時時間,如果15分鐘內沒操作將自動斷開。 proxy_pass mysqldb; }} #注意,需要nginx 有 stream模組,在編譯的過程中加引數 ——with-stream

nginx 反代的用法挺多的,我只是列舉出我覺得最實用的幾種,如果有錯誤的地方請指出來,大家共同學習。