저는 nginx의 역방향 프록시 뒤에 WordPress를 제공하고 있습니다. 다른 루트 디렉터리에 있는 정적 페이지를 제공하고 싶습니다.
나는 이것을 시도했습니다 :
server {
listen 80;
listen [::]:80;
server_name ${NGINX_HOST};
root /static-pages;
sendfile on;
tcp_nodelay on;
location / {
try_files $uri $uri/ /static-pages/ =404;
#try_files $uri $uri/ =404;
#try_files /static-pages $uri/ =404;
proxy_read_timeout 90;
proxy_connect_timeout 90;
proxy_redirect off;
proxy_pass http://wordpress;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
WordPress가 제대로 실행되고 있지만 정적 페이지 중 하나에 액세스하려고 하면 계속 404가 표시됩니다. 물론 location
각 정적 페이지에 지시어를 추가할 수도 있지만 이는 오버헤드처럼 보입니다. 작동하게 할 수 있나요?
관련이 있다고 생각되는 디버그 로그의 일부는 다음과 같습니다.
[debug] 7#7: *2 generic phase: 12
[debug] 7#7: *2 try files handler
[debug] 7#7: *2 http script var: "/marketing-analyst"
[debug] 7#7: *2 trying to use file: "/marketing-analyst" "/static-pages/marketing-analyst"
[debug] 7#7: *2 http script var: "/marketing-analyst"
[debug] 7#7: *2 trying to use dir: "/marketing-analyst" "/static-pages/marketing-analyst"
[debug] 7#7: *2 try file uri: "/marketing-analyst"
디렉토리가 확실히 /static-pages/marketing-analyst
존재합니다.
답변1
작업 솔루션:
server {
error_log /var/log/nginx/error.log debug;
listen 80;
server_name ${NGINX_HOST};
sendfile on;
tcp_nodelay on;
root /static-pages;
index index.html index.php;
try_files $uri $uri/ @proxy;
location @proxy {
proxy_read_timeout 90;
proxy_connect_timeout 90;
proxy_redirect off;
proxy_pass http://wordpress$uri;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header Accept-Encoding "";
proxy_set_header Proxy "";
}
location = / {
proxy_read_timeout 90;
proxy_connect_timeout 90;
proxy_redirect off;
proxy_pass http://wordpress;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header Accept-Encoding "";
proxy_set_header Proxy "";
}
}
두 개의 유사한 프록시를 짜낼 수 있다면 기쁘겠지만 별 문제는 아닙니다.
답변2
거기쯤이야. 해결책은 먼저 정적 파일을 사용해 본 다음 대체 수단으로 역방향 프록시(워드프레스)로 이동하는 것입니다.
server {
error_log /var/log/nginx/error.log debug;
listen 80;
listen [::]:80;
server_name ${NGINX_HOST};
sendfile on;
tcp_nodelay on;
root /static-pages;
location / {
try_files $uri $uri/ /static-pages/ @proxy;
}
location @proxy {
proxy_read_timeout 90;
proxy_connect_timeout 90;
proxy_redirect off;
proxy_pass http://wordpress;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
인용하다:
https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#proxy-everything
하지만! 액세스하려고 하면 /
403 액세스 거부 /static-pages/index.html
(정보가 존재하지 않음) 메시지가 표시됩니다. /index.html
요청과 일치하는 디렉터리가 없는 경우 프록시를 확인하고 반환하지 않도록 어떻게 알 수 있나요?