여러 보안 관련 헤더를 서버에 추가하여 모든 프록시 위치에서 반환되도록 하는 Nginx 프록시 설정이 있습니다. 일부 위치에서는 추가 헤더(예: Content-Security-Policy
to ) 를 추가해야 하고 , 다른 특정 위치에서는 서버 수준에 추가된 헤더 중 하나(예: from ) /
를 제거해야 합니다 .X-Frame-Options
/framepage.html
nginx.conf
# ...
server {
# ...
include security-headers.conf;
location / {
proxy_pass http://web:5000/;
include security-headers.conf;
add_header Content-Security-Policy "my csp...";
}
location = /framepage.html {
proxy_pass http://web:5000/framepage.html;
# TODO: remove `X-Frame-Options` response header from this specific page
# Tried add_header X-Frame-Options "";
# Tried proxy_set_header X-Frame-Options "";
# Tried proxy_hide_header X-Frame-Options;
}
location /api/ {
proxy_pass http://api:5000/;
}
location /otherstuff/ {
proxy_pass http://otherstuff:5000/;
}
# ...
}
security-headers.conf
add_header Referrer-Policy same-origin;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
다음을 시도했지만 그 중 어느 것도 위치 응답 X-Frame-Options
에서 헤더를 제거하지 않는 것 같습니다 /framepage.html
.
add_header X-Frame-Options "";
proxy_set_header X-Frame-Options "";
proxy_hide_header X-Frame-Options;
X-Frame-Options
위치 응답 에서 헤더 를 어떻게 제거할 수 있나요 /framepage.html
?
답변1
헤더 구성 속성은 약간 혼란스럽습니다. 그 역할은 다음과 같습니다.
proxy_set_header
요청 헤더를 설정하는 것입니다
add_header
. 응답에 헤더를 추가하는 것
proxy_hide_header
입니다. 응답 헤더를 숨기는 것입니다.
add_header
응답에 이미 존재하는 헤더를 바꾸려는 경우 (서버와 추가한 값의) 값이 쌓이기 때문에 충분하지 않습니다 .
이 작업은 두 단계로 수행해야 합니다.
1)헤더 제거:
proxy_hide_header Access-Control-Allow-Origin;
2)사용자 정의 헤더 값을 추가하십시오.
add_header Access-Control-Allow-Origin "*" always;
답변2
headers_more 모듈을 사용할 수 있습니다. 예:
location / {
proxy_pass http://upstream_server/;
more_clear_headers 'Access-Control-Allow-Origin';
}
답변3
타사의 "Headers More" 모듈을 사용해 볼 수도 있습니다.
https://github.com/openresty/headers-more-nginx-module
그리고 다음과 같은 내용이 있습니다.
load_module modules/ngx_http_headers_more_filter_module.so;
http {
...
more_clear_headers 'X-Frame-Options';
...
}
답변4
사용하여Nginx 루아 모듈.
패키지를 설치 해야 합니다 nginx-extras
. 예를 들어 적성에서는 apt install nginx-extras
.
안에 nginx.conf
:
load_module /usr/lib/nginx/modules/ndk_http_module.so;
load_module /usr/lib/nginx/modules/ngx_http_lua_module.so;
http {
...
header_filter_by_lua_block {
ngx.header["server"] = nil
}
}
실행을 확인하려면 nginx -V
가 표시됩니다 http-lua
. 모듈을 로드하는 데 ndk_http_module.so
필요합니다 ngx_http_lua_module.so
.
nginx -t
항상 구성을 확인하기 위해 실행하는 것이 가장 좋습니다 .