
私は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が正常に実行されていますが、静的ページの1つにアクセスしようとすると、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つの同様のプロキシを絞ることができればうれしいですが、それはあまり問題ではありません。
答え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
要求に一致するディレクトリがない場合は、プロキシを確認して返さないようにどうすればわかりますか?