I have a following wordpress nginx configuration in my /etc/nginx/sites-available/wordpress:
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;
}
}
As you can seem, there is a static, NextJS-based frontend for WordPress. And generally, it works just great. There is this one quirk that does not work, though, and I'm not sure if it is a WordPress issue or a Nginx issue.
- When the user navigates to /wordpress, then we see content from wordpress, which is fine
- When the user navigates to /wordpress/graphql, then the grahpql endpoint is working just fine
- When the user navigates to /wordpress/wp-admin, then the things break. There is a redirect loop, and the brauser reports that the site is not redirecting properly and so on.
- when the user navigates to /wordpress/wp-admin/index.php, then everything works fine though.
So where does this come from? Is it a Nginx thing? WordPress thing? How do I fix this?
Edit 1: Added curl -vvv output:
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
Edit 2: curl -vvv with trailing slash:
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
The
/wordpress/wp-admin/
redirects to itself.Have you tried using the exact example for this use case from the official Nginx WordPress documentation?
Here, modified for your use case where it should not affect
.php
outside/wordpress/
:Your
fastcgi_split_path_info
differs from this recommendation.one can try using following in the location block (feel free to adjust path as needed) i.e.
/wp-admin/index.php?$args
depending on your environment/setup:REF: