我的 /etc/nginx/sites-available/wordpress 中有以下 wordpress nginx 配置:
index index.html index.htm index.nginx-debian.html;
location / {
proxy_pass http://nextjs;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
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 Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_pass_request_headers on;
}
location /wordpress {
root /var/www;
try_files $uri $uri/wordpress/ /wordpress/index.php$is_args?$args;
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include snippets/fastcgi-php.conf;
fastcgi_buffers 1024 4k;
fastcgi_buffer_size 128k;
}
}
如您所见,WordPress 有一个基于 NextJS 的静态前端。而且总体来说,它运行良好。不过有一个问题无法正常工作,我不确定这是 WordPress 的问题还是 Nginx 的问题。
- 当用户导航到 /wordpress 时,我们会看到来自 wordpress 的内容,这很好
- 当用户导航到 /wordpress/graphql 时,grahpql 端点工作正常
- 当用户导航到 /wordpress/wp-admin 时,事情就发生了变化。出现重定向循环,并且 brauser 报告网站未正确重定向等等。
- 当用户导航到 /wordpress/wp-admin/index.php 时,一切都正常运行。
那么,这是从哪里来的呢?是 Nginx 的问题吗?还是 WordPress 的问题?我该如何解决这个问题?
编辑 1:添加了 curl -vvv 输出:
C:\Users\alank>curl -vvv https://mydomain.ee/wordpress/wp-admin
* Trying 194.204.13.171:443...
* Connected to mydomain.ee (194.204.13.171) port 443 (#0)
* schannel: disabled automatic use of client certificate
* ALPN: offers http/1.1
* ALPN: server did not agree on a protocol. Uses default.
* using HTTP/1.x
> GET /wordpress/wp-admin HTTP/1.1
> Host: mydomain.ee
> User-Agent: curl/8.0.1
> Accept: */*
>
* schannel: remote party requests renegotiation
* schannel: renegotiating SSL/TLS connection
* schannel: SSL/TLS connection renegotiated
* schannel: remote party requests renegotiation
* schannel: renegotiating SSL/TLS connection
* schannel: SSL/TLS connection renegotiated
< HTTP/1.1 302 Found
< server: nginx/1.18.0 (Ubuntu)
< date: Tue, 22 Aug 2023 10:19:10 GMT
< content-type: text/html; charset=UTF-8
< transfer-encoding: chunked
< expires: Wed, 11 Jan 1984 05:00:00 GMT
< cache-control: no-cache, must-revalidate, max-age=0
< link: <https://mydomain.ee/wordpress/wp-json/>; rel="https://api.w.org/"
< x-redirect-by: WordPress
< location: https://mydomain.ee/wordpress/wp-admin/
<
* Connection #0 to host mydomain.ee left intact
编辑2:curl -vvv 带有尾部斜杠:
C:\Users\alank>curl -vvv https://mydomain.ee/wordpress/wp-admin/
* Trying 194.204.13.171:443...
* Connected to mydomain.ee (194.204.13.171) port 443 (#0)
* schannel: disabled automatic use of client certificate
* ALPN: offers http/1.1
* ALPN: server did not agree on a protocol. Uses default.
* using HTTP/1.x
> GET /wordpress/wp-admin/ HTTP/1.1
> Host: mydomain.ee
> User-Agent: curl/8.0.1
> Accept: */*
>
* schannel: remote party requests renegotiation
* schannel: renegotiating SSL/TLS connection
* schannel: SSL/TLS connection renegotiated
* schannel: remote party requests renegotiation
* schannel: renegotiating SSL/TLS connection
* schannel: SSL/TLS connection renegotiated
< HTTP/1.1 302 Found
< server: nginx/1.18.0 (Ubuntu)
< date: Tue, 22 Aug 2023 11:13:01 GMT
< content-type: text/html; charset=UTF-8
< transfer-encoding: chunked
< expires: Wed, 11 Jan 1984 05:00:00 GMT
< cache-control: no-cache, must-revalidate, max-age=0
< link: <https://mydomain.ee/wordpress/wp-json/>; rel="https://api.w.org/"
< x-redirect-by: WordPress
< location: https://mydomain.ee/wordpress/wp-admin/
<
* Connection #0 to host mydomain.ee left intact
答案1
重定向/wordpress/wp-admin/
至其自身。
您是否尝试过使用官方提供的此用例的确切示例Nginx WordPress文档?
这里,针对您的使用情况进行了修改,使其不会影响.php
外部/wordpress/
:
location /wordpress {
try_files $uri $uri/ /wordpress/index.php?$args;
location ~ \.php$ {
fastcgi_split_path_info ^(/wordpress)(/.*)$;
}
}
您的fastcgi_split_path_info
意见与此建议不同。
答案2
您可以尝试在位置块中使用以下内容(根据需要随意调整路径),即/wp-admin/index.php?$args
取决于您的环境/设置:
try_files $uri $uri/ /index.php?$args;
参考: