Nginx
nginx 將不帶斜杠的子目錄請求重定向到具有指定埠的 URL
我有以下問題。
在我的本地測試配置中,當我嘗試訪問
https://www.testdomain.local/admin
它時,它總是會將我重定向到https://www.testdomain.local:8443/admin/
我的系統中無法解決的問題。我的 nginx 在 Docker 容器中執行,該容器將請求轉發到埠 443 到埠 8443,nginx 正在監聽該埠。
admin 文件夾是根文件夾的子目錄。
root -> /application/public/testdomain root/admin -> /application/public/testdomain/admin
目前行為如下所示:
https://www.testdomain.local -> https://www.testdomain.local (correct) https://www.testdomain.local/ -> https://www.testdomain.local (correct) https://www.testdomain.local/admin/ (with trailing slash) -> https://www.testdomain.local/admin/ (correct) https://www.testdomain.local/admin (without trailing slash) -> https://www.testdomain.local:8443/admin/ (incorrect)
對於最後一種情況,我的首選行為是:
https://www.testdomain.local/admin -> https://www.testdomain.local:8443/admin or https://www.testdomain.local/admin/
我嘗試了許多通過 Google 或 ServerFault 找到的解決方案,但無法獲得所需的行為。
server { listen 8443 ssl; server_name www.testdomain.local; client_max_body_size 108M; access_log /var/log/nginx/testdomain.access.log anonymized; ssl_certificate /application/common/certificate.crt; ssl_certificate_key /application/common/privatekey.key; root /application/public/testdomain; index index.php; if (!-e $request_filename) { rewrite ^.*$ /index.php last; } location ~ \.php$ { fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log"; fastcgi_buffers 16 16k; fastcgi_buffer_size 32k; include fastcgi_params; } }
nginx 不知道您實際上是在預設埠 443 上為站點提供服務,因為您告訴它在不同的埠上偵聽。因此,當它創建自己的重定向時,它會添加非標準埠號。
您可以使用 關閉此行為
port_in_redirect off;
。然後,nginx 將在其重定向中省略埠號。或者,您可以關閉絕對重定向,
absolute_redirect off;
所有重定向都將相對於 URL 路徑根。在這種情況下,nginx 將重定向到/admin/
而不是https://www.testdomain.local:8443/admin/
.