什麼是反向代理 Reverse Proxy?
反向代理是在真實伺服器與客戶端間的代理伺服器, 當使用者透過客戶端 (瀏覽器) 訪問網站時, 反向代理伺服器會將請求轉送到背後的真實伺服器, 再將網站的結果傳送給客戶端。真實伺服器可能是本機的其他 Port, 也可能在內部網路, 或者在其他外部網路, 這樣使用者不會知道真實的伺服器在那裡, 可以隱藏真正伺服器的位置, 而且也可以實現 load balancing.
安裝 Nginx 可以用 yum 或 apt-get 安裝:
$ sudo yum install nginx
或
$ sudo apt install nginx
然後啟動 Nginx 及設定開機自動啟動:
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
$ sudo systemctl enable nginx
當安裝了 Nginx 後, 開啟 Nginx 的設定檔:
$ sudo vim /etc/nginx/conf.d/default.conf
加入以下內容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
server{ listen 80; server_name example.yourdomain.com; location / { # 後端的 Web Server, 即真實伺服器: proxy_pass http://www.your-real-domain.com; # 定義 header 變數, 記錄使用者的 IP 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 $http_x_forwarded_proto; proxy_max_temp_file_size 0; } } |
上面設定了網域 example.yourdomain.com, 而後端真實伺服器是 http://www.your-real-domain.com.
由於真實伺服器與使用者中間有反向伺服器, 要取得使用者的 IP, 不能用預設的方法。
上面的例子中, 在真實伺服器的 PHP 程式內, 要取得使用者的 IP, 需要用 $_SERVER[‘HTTP_X_REAL_IP’] 或 $_SERVER[‘HTTP_X_FORWARDED_FOR’] 取得.
設定後先檢查設定檔的語法是否正確:
$ sudo nginx -t
如果沒有錯誤, 便可以重新載入 Nginx 的新設定:
$ sudo nginx -s reload
現在當有訪問 Nginx 時, 便會載入 http://www.your-real-domain.com 的內容.