Nginx
4xx 響應程式碼的 Nginx 反向代理問題
我已將 nginx 配置為代理來自埠 8000 的請求,以路由到不同的 ip。在配置中,我還添加了 Access-control-Allow-Origin 標頭。如果伺服器使用 2xx 響應程式碼進行響應,這可以正常工作。但是如果伺服器響應 4xx 響應碼,它不包含下面提到的標頭
server { listen *:8000; ssl on; ssl_certificate /etc/nginx/ssl/axis.crt; ssl_certificate_key /etc/nginx/ssl/axisPrivate.key; server_name website.com; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP; access_log /var/log/nginx/nginx.vhost.access.log; error_log /var/log/nginx/nginx.vhost.error.log; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass https://api; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_ssl_session_reuse off; proxy_set_header Host $http_host; proxy_redirect off; proxy_intercept_errors off; # Simple requests if ($request_method ~* "(GET|POST|PUT)") { add_header "Access-Control-Allow-Origin" "https://website.com"; } # Preflighted requests if ($request_method = OPTIONS ) { add_header "Access-Control-Allow-Origin" "https://website.com"; add_header "Access-Control-Allow-Methods" "GET,PUT,POST, OPTIONS, HEAD"; add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept,access-control-allow-methods,access-control-allow-origin"; return 200; } } } upstream api { server ip:port; }
由於標頭缺少 Access-Control-Allow-Origin,因此瀏覽器會阻止對響應執行的任何操作。
瀏覽器中的錯誤日誌:
POST https://website.com:8000/employee 409 () EmployeeRegistration:1 Failed to load https://website.com:8000/employee: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://website.com' is therefore not allowed access. The response had HTTP status code 409.
這是預期的行為:
語法: add_header 名稱值
$$ always $$; 預設值:- 上下文:http、伺服器、位置,如果在位置
如果響應程式碼等於 200、201 (1.3.10)、204、206、301、302、303、304、307 (1.1.16、1.0.13) 或 308 (1.13),則將指定欄位添加到響應標頭.0)。該值可以包含變數。
可能有幾個
add_header
指令。當且僅當add_header
在目前級別上沒有定義任何指令時,這些指令才從上一層繼承。如果
always
指定了參數(1.7.5),則無論響應程式碼如何,都會添加標頭欄位。您需要指令中的always關鍵字。
add_header