XF 2.0 Friendly URL's with Nginx throwing 404's

entelechy

Active member
Licensed customer
The sites running an SSL and works fine with the configuration prior to trying to get friendly urls happening.

I followed (https://xenforo.com/help/friendly-urls/), but everything except / is throwing 404's. After every modification I've restarting nginx each time.

The server block as it stands right now:

server {

root /var/www/my-forum.com/html;

index index.php index.html;

server_name my-forum.com www.my-forum.com;

location / {
try_files $uri $uri/ /var/www/my-forum.com/html/index.php?$uri&$args;
}
location /install/data/ {
internal;
}
location /install/templates/ {
internal;
}
location /internal_data/ {
internal;
}
location /library/ {
internal;
}

location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
include snippets/fastcgi-php.conf;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

location ~ /\.ht {
deny all;
}

listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/my-forum.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/my-forum.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
 
Last edited:
If anyone can see any mistakes in the code above or has experience with this same issue with Nginx x Friendly URLs I'd really appreciate any advice.
 
Hi,
try the php-location block first as in the docs:
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
(adjusting your socket-parameters).

I think the problem is with your
include snippets/fastcgi-php.conf;

-Markus
 
Hi, thanks for the reply.

Adding try_files $uri =404; is not needed/possible because it's already called in include snippets/fastcgi-php.conf; (error message when adding this is:
nginx: [emerg] "try_files" directive is duplicate in /etc/nginx/snippets/fastcgi-php.conf:5

The difference between the php location block I'm using and the one in the docs that you refer to is that the docs show a setup for php-7.0 cgi only..
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;

But I'm running PHP-fpm, hence:

fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;

The inclusion of snippets/fastcgi-php.conf; is from setting up LEMP via digitalocean guidelines (https://www.digitalocean.com/commun...ux-nginx-mysql-php-lemp-stack-in-ubuntu-16-04).
 
Or is there an incompatibility with friendly urls and fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; + includes snippets/fastcgi-php.conf; ??
 
What I wanted to recommend is to first start with the clean example-configuration provided in the XF-docs and see if that works. As you run php socket-based this change will be needed.

If that works, try to adjust your settings step by step to what you have non-working right now and see where it fails.

Friendly URLs definetly work with nginx (as I am using this setup).

-Markus
 
Ok I've got you. Trying to just use the block as per the docs throws a 502 for all pages.

Are you using fpm? Do you have ssl? Any chance of seeing what your block looks like for reference? I've had friendly urls working on a different Nginx text forum without issue, but there's something about this configuration that's screwing with it.
 
Last edited:
Ok so I looked through the post you just referenced, and started again from the beginning of this post.

If use..

try_files $fastcgi_script_name =404; - in the PHP block, it throws a 404 error on all pages except /

try_files $uri $uri/ /var/www/my-forum.com/html/index.php?$uri&$args; - in the PHP block, it throws a 500 error on all pages except /


The errors logged when using try_files $uri $uri/ /var/www/my-forum.com/html/index.php?$uri&$args; in the PHP block are:

[error] 3643#3643: *17 rewrite or internal redirection cycle while internally redirecting to "/var/www/my-forum.com/html/index.php",
client: <ip address removed>, server: my-forum.com, request: "GET /forums/general-discussion.19/ HTTP/1.1", host: "my-forum.com", referrer: "https://my-forum.com/"

There are no errors that get logged when try_files $fastcgi_script_name =404; is used in the PHP block, there's just 404's for all non-/ pages.

I saw in your referred thread, that the problem was showthread.php in the web root - there's issue with that in this case
 
Thanks for the help you provided trying to solve this Markus.

For anyone else in the same position reading this in the future, I reached out to another member here who pointed out that this line was the culprit:

"try_files $uri $uri/ /var/www/my-forum.com/html/index.php?$uri&$args;"

After shortening it to "try_files $uri $uri/ /index.php?$uri&$args;" friendly URL's are functioning perfectly on the site.
 
try_files $uri $uri/ /index.php?$uri&$args
Try this

Since you already set the root there is no need to add it again, else it will look for the set path inside your root, which would not work.

Edit: I should read threads first completely before replying lol
 
Back
Top Bottom