我的 /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
重定向
/wordpress/wp-admin/
到自身。您是否尝试过使用官方Nginx WordPress文档中的此用例的确切示例?
在这里,根据您的用例进行修改,不应影响
.php
外部/wordpress/
:您的
fastcgi_split_path_info
建议与此建议不同。人们可以尝试在位置块中使用以下内容(可以根据需要随意调整路径),即
/wp-admin/index.php?$args
根据您的环境/设置:参考: