One of the sites I want to implement browser caching for images
has this particular server {} block on virtual.conf
server {
listen 80;
server_name www.example.net example.net;
location / {
root /var/www/example.net/public_html;
index index.html index.htm index.php;
}
error_page 404 /404.html;
location = /404.html {
root /var/www/example.net/public_html;
}
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/example.net/public_html;
}
location ~* \.(jpg|jpeg|png|gif)$ {
expires 180d;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
root /var/www/example.net/public_html;
error_log /var/www/example.net/public_html/error.log error;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Normally this directive
location ~* \.(jpg|jpeg|png|gif)$ {
expires 180d;
}
Should take care of caching images on the user end. But instead when I access
an image on my website I get 404 not found. I am not sure why this I caused.
Yes. I reloaded/restarted nginx after adding the directive.
The image resides in a subfolder like:
example.net/images/dir1/user_photos/photo.jpg
or
example.net/images/dir1/user_photos/photo.jpg
Any help would be appreciated.
Thank you.
Root parameter should be outside the location directive.
It is not the best practice to have root inside location
Change
location / {
root /var/www/html;
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args;
}
To:
root /var/www/html;
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args;
}
Related
I have a Wordpress instance running fine, and i have a directory on my server that needs to redirect users to another domain outside the main server using a 302 rule. I add this on my server block and the redirection works fine:
server {
listen 80;
server_name domain.com;
location /lps {
return 302 https://newdomain/$request_uri;
}
}
but when i go to domain.com i got a 404 Not Found error.
I also try without luck.
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
I manage to solve my issue with this:
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Main Server Config
server {
listen 80;
server_name localhost;
root /home/site/wwwroot;
index index.html index.htm index.php;
error_page 500 502 503 504 /50x.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location /lps {
return 302 https://newdomain.net/$request_uri;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
My Azure container have FastCGI and had to add the php instruction
Hey i want install a forum (xenforo) , i already got all the .php files , i put the folder on /usr/share/nginx/html where is the page (main page index.html) , but when i do 127.0.0.1/forum/ i get that error
403 Forbidden
nginx/1.10.3
so I want to know how can I fix it, the configuration is that one
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
getenforce is disabled
When you setup Xenforo 2 on nginx you need to read the documentation here.
It tells you how to setup the nginx config like this:
location /xf/ {
try_files $uri $uri/ /xf/index.php?$uri&$args;
index index.php index.html;
}
location /xf/install/data/ {
internal;
}
location /xf/install/templates/ {
internal;
}
location /xf/internal_data/ {
internal;
}
location /xf/library/ { #legacy
internal;
}
location /xf/src/ {
internal;
}
location ~ \.php$ {
try_files $uri /index.php?$uri&$args;
#try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
This should fix your issues. That is what I'm using on centminmod and it works great. If your forum is located in the root directory remove the "/xf" from each path or if you're in a different folder, change it.
So I have two issues that I am trying to do. First I am trying to understand NGINX and use it for redirects and everything as well; however, if I try to remove the extensions from the php / html files it just downloads the file. If I use another thing to just try (without the file extension try) it just gives me 404s. I am not sure what the issue is nor what I am doing wrong.
First I'll show my remove php file extension issue:
server {
listen 443;
server_name XXX.XX.XX.XX;
root /var/www/html;
location / {
try_files $uri $uri.html $uri/ #extensionless-php;
index index.html index.htm index.php;
}
location ~ \.php$ {
try_files $uri =404;
}
location #extensionless-php {
rewrite ^(.*)$ $1.php last;
}
}
Here is my other code to fix the problem above (but just gives me 404s)
server {
listen 443;
server_name XXX.XX.XX.XX;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
XXX.XX.XX.XX is my the servers ip.
PS: I have read that I need the bottom section first to get the top section working.
Sources include:
How to remove both .php and .html extensions from url using NGINX?
https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04
Ty for your help.
UPDATES:
Kuldeep KD - 770 /var/www/html (not solution but thanks)
Jignesh Joisar - Trying port 80 (failed but per usual thanks)
Check for necessary permissions on /var/www/html
you can change the permissions using
chmod -R 770 /var/www/html/
also check for the owner of directory you may have to change that as well, depends on user your nginx is using.
chown -R user:group /var/www/html
try to this one in 80 port
server {
listen 80 default_server;
root /var/www/html/;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm;
server_name localhost;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.php$is_args$args;
}
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
I'm trying to set up nextcloud on nextcloud.mydomain.com while I have my regular website on mydomain.com. Here's my default.conf for nginx:
server {
listen 80;
listen [::]:80;
server_name IP_HERE;
root /var/www/html/;
index index.php index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/html;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include snippets/fastcgi-php.conf;
}
location ~ /\.ht {
deny all;
}
}
The nextcloud.conf file follows Step 4 of this tutorial: https://www.linuxbabe.com/ubuntu/install-nextcloud-11-ubuntu-16-04-nginx-config
I don't know why, but when I access nextcloud.mydomain.com I just get the index.html in my /html webroot instead of the nextcloud setup wizard in the /nextcloud folder.
Any ideas? Thank you very much in advance!
I'm currently stuck in configuring Jekyll and nginx to work together on a VPS.
Essentially, I set up everything and a git hook from my local machine to the VPS.
Here is my nginx config file:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /var/www;
index index.php index.html index.htm;
server_name server_ip;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
server {
listen 80;
server_name server_ip/blog;
location / {
root /var/www/blog;
index index.html index.htm;
}
}
Ideally, what I'd like is to serve what is in /var/www/blog at blog.domain.example, or blog.server_ip at the moment.
However, when jekyll build runs, the URLs are all wrong. I can see index.html at server_ip/blog, but the /blog/ bit in the URL is not replicated in the links on the Jekyll page.
For example, a post should live at server_ip/blog/2015/04/07/title, but the URL I'm given is server_ip/2015/04/07/title. Same goes for the CSS files, and images as well.
Thanks very much for your help.
You have to set baseurl: "/blog"
And link to posts like this <a href="{{site.baseurl}}{{post.url}}>....
And generaly use {{site.baseurl}} to built any url.