ポート8000に届くリクエストをプロキシし、別のIPにルーティングするようにnginxを構成しました。構成では、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_headername value[常に];
デフォルト:—コンテキスト: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)、応答コードに関係なくヘッダーフィールドが追加されます。
add_header
ディレクティブにはalwaysキーワードが必要です。