nginx proxy_set_header x-forwarded-proto 似乎不起作用
由於我是 nginx 代理的初學者,我有一個問題。
它的要點:
nginx 代理在哪里為 php 設置預設值
$ _SERVER[“HTTP_X_FORWARDED_HOST”], $ _伺服器
$$ “HTTP_X_FORWARDED_SERVER” $$和
$_SERVER$$ “HTTP_X_FORWARDED_FOR” $$? 更多資訊:
這是一個開發環境。
我的 nginx 代理上有一個虛擬主機條目:
server { listen 192.168.1.17:443 ssl; server_name foo.bar.com; ssl_certificate /etc/nginx/ssl/boerse.de.crt; ssl_certificate_key /etc/nginx/ssl/boerse.de.key; location / { proxy_pass http://foo_cluster/; proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
foo_cluster 僅上游一台伺服器:
upstream foo_cluster { ip_hash; server 192.168.5.33:80 fail_timeout=30s; server 192.168.5.34:80 fail_timeout=30s down; }
在我位於 192.168.5.33 的 apache 網路伺服器上,我有另一個虛擬主機:
<VirtualHost *:80> ServerName foo.bar.com ServerAdmin webmaster@bar.com DocumentRoot /var/www/foo-bar-com <Directory /var/www/foo-bar-com/> Options Indexes FollowSymLinks MultiViews AllowOverride ALL Order allow,deny allow from all </Directory> LogLevel warn ErrorLog /var/log/apache2/foo.bar.com_error.log CustomLog /var/log/apache2/foo.bar.com_access.log combined ServerSignature On SetEnv ApplicationConfigFiles "/var/ApplicationConfigFiles/" php_value include_path ".:/var/www/baz/global/php/base:/var/www/foo-bar-com/vendor/library/:/var/www/foo-bar-com/vendor/models/model/:" php_value auto_prepend_file /var/www/foo-bar-com/class/functions/prepend.php php_value auto_append_file /var/www/foo-bar-com/class/functions/append.php </VirtualHost>
在我本地機器上的主機文件中,我添加了伺服器:
... 192.168.1.17 foo.bar.com ...
在我的 prepend.php 中,我只輸出超全域 $_SERVER 並停止:
<?php var_dump($_SERVER); exit; ...
好的。現在完成所有設置後,我在瀏覽器上打開網站https://foo.bar.com
這裡是輸出原始碼的摘錄:
array(32) { ... ["HTTP_HOST"]=> string(11) "foo.bar.com" ["HTTP_X_FORWARDED_HOST"]=> string(11) "foo.bar.com" ["HTTP_X_FORWARDED_SERVER"]=> string(11) "foo.bar.com" ["HTTP_X_FORWARDED_FOR"]=> string(13) "192.168.2.131" ["HTTP_CONNECTION"]=> string(5) "close" ...
由於我缺少預期的 X-Forwarded-Proto,我註釋掉了 nginx vhost 文件中的所有 proxy_set_header(並重新載入服務):
server { listen 192.168.1.17:443 ssl; server_name foo.bar.com; ssl_certificate /etc/nginx/ssl/boerse.de.crt; ssl_certificate_key /etc/nginx/ssl/boerse.de.key; location / { proxy_pass http://foo_cluster/; #proxy_set_header Host $host; #proxy_set_header X-Forwarded-Host $host; #proxy_set_header X-Forwarded-Server $host; #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #proxy_set_header X-Forwarded-Proto $scheme; } }
然而,結果輸出保持不變。
我已經在Google上搜尋了為什麼整天都會出現這種情況。
proxy_set_header 的 nginx 文件指出:
該指令允許重新定義和添加一些將傳輸到代理伺服器的請求標頭行。
我想知道為什麼它說完全“重新定義”。我沒有找到關於這裡預定義的內容要通過 proxy_set_header 重新定義的答案。
我已經在 /etc/nginx/nginx.conf 中搜尋了 proxy_set_header,實際上我使用了整個 /etc/nginx 目錄
grep -ri x-forwarded-host *
僅在站點可用和站點啟用的位置找到結果。
我在 apache 網路伺服器上搜尋了相同的結果,但沒有有用的結果(我認為它們可能是在 php 程式碼中設置的,但我錯了)。
我懷疑我的 nginx vhost 文件是否是使用過的。
感謝您的時間。
Tldr:
nginx 代理在哪里為 php 設置預設值
$ _SERVER[“HTTP_X_FORWARDED_HOST”], $ _伺服器
$$ “HTTP_X_FORWARDED_SERVER” $$和
$_SERVER$$ “HTTP_X_FORWARDED_FOR” $$?
事實證明,我重新載入 nginx 配置的首選方法已損壞:
/etc/init.d/nginx reload
它只是沒有重新載入配置。
重新啟動代理後,它按預期工作。
也可以直接通過二進製文件重新載入:
nginx -s reload
我不知道為什麼會這樣,所以我要問另一個問題。