nginx 역방향 프록시 + 정적 파일

nginx 역방향 프록시 + 정적 파일

저는 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요청과 일치하는 디렉터리가 없는 경우 프록시를 확인하고 반환하지 않도록 어떻게 알 수 있나요?

관련 정보