Ngnix two server block one by domain another one by IP - magento

I am Trying to create two instance on my NGnix server
First would be accessed by
mydomain.com (it listening to port 80 )
Second using
172.32.32.123:81 (it listening to port 81 and this IP is server IP)
this is my default file
server {
listen 80 default_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 index.nginx-debian.html;
server_name mydomain.com;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
server {
listen 81;
server_name 172.32.32.123:81;
root /var/www/html/root;
index index.html index.php;
set $MAGE_MODE developer; # or production or developer
set $MAGE_ROOT /var/www/html/root/;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
}
include /var/www/html/root/nginx.conf.sample;
}
}
The server block is working fine for the one when using domain name but in case of IP based domain only home page is working on inner pages we are getting 404 error

It's unclear what's supposed to happen — what is the correct path that's supposed to handle one server versus the other?!
If they're supposed to have the same underlying files, then your root directives are quite suspicious — one is simply /var/www/html/, the other one is /var/www/html/root/ — is that intentional?
Otherwise, in case of a 404 error, the underlying path names (that aren't found) should be mentioned within the file specified by http://nginx.org/r/error_log, which will likely reveal what is up — do those returning 404 actually exist on the disc?!

This would be better moved to ServerFault.
While I'm not sure of it, The inclusion of the port in the ServerName directive looks suspicious to me.
This looks dangerous:
include /var/www/html/root/nginx.conf.sample
If /var/www/html/root, and the directories above it are only writeable by root, it might be OK. Otherwise it's likely to be a root exploit for whichever user can write to the file. Copy the file to somewhere safe, and include it at that location.

Solved the issue with using following default config
server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name magedev.com;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
#try_files $uri $uri/ =404;
index index.html index.php;
#try_files $uri $uri/ #handler;
#try_files $uri $uri/ /index.php;
expires 30d;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
#include fastcgi_params;
include snippets/fastcgi-php.conf;
#
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
#fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
#include /var/www/html/root/nginx.conf.sample;
}
server {
listen 81;
server_name 192.87.123.132;
root /var/www/html/root;
index index.html index.php;
set $MAGE_MODE developer; # or production or developer
set $MAGE_ROOT /var/www/html/root/;
# **Inclusion of try_files Solved the issue for me**
location / {
try_files $uri $uri/ /index.php?$args;
autoindex on;
autoindex_exact_size off;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
}
include /var/www/html/root/nginx.conf.sample;
}
Inclusion of try_files Solved the issue for me
location / {
try_files $uri $uri/ /index.php?$args;
autoindex on;
autoindex_exact_size off;
}

Related

Laravel 403 Forbidden nginx/1.14.0 (Ubuntu) in Nginx Digital Ocean

I deployed my Laravel-5.8 project to DigitalOcean and it works fine as:
http://laravelproject.net
But since I am using Azure AD and Socialite. Azure AD does not allow http but https
/etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/html/laravelproject;
# Add index.php to the list if you are using PHP
# index index.php index.html index.htm;
# index index.php index.html index.htm index.nginx-debian.html;
server_name laravelproject.net;
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;
# try_files $uri $uri/ =404;
}
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
I also have:
/etc/nginx/sites-available/default
server {
listen 80;
listen [::]:80;
server_name laravelproject.net;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name laravelproject.net;
root /var/www/html/peopleedge;
ssl_certificate /etc/letsencrypt/live/laravelproject.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/laravelproject.net/privkey.pem;
ssl_protocols TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
ssl_prefer_server_ciphers on;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.php index.html index.htm index.nginx-debian.html;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
location ~ /.well-known {
allow all;
}
}
When I tried to run the project I got this error:
Laravel 403 Forbidden nginx/1.14.0 (Ubuntu)
How do I resolve it please?
Thank you.
I know its late already but for any other person who may need it,below code config helps me resolve the isssue
`server {
listen 80;
server_name yourip or domain;
root /var/www/html/public;
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
`
also remember to reload nginx with ` sudo systemctl reload nginx
`

Laravel 403 forbidden error in Ubuntu LEMP stack

I have installed laravel in the "/var/www" folder but I am getting 403 forbidden error, and folders in the "var/www" folder have a lock icon. How can i fix this problem ?
Settings like this:
# Don't use them in a production 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 192.168.1.6;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.php?$query_string;
}
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
If your laravel installation is under /var/www/html then you will need to update your nginx conf file to root /var/www/html/public;. Your configuration file looks ok to me except the public part.
Laravel's index.php is located in the public folder.
# Don't use them in a production server
root /var/www/html/public; # This line.
# Add index.php to the list if you are using PHP
index index.php index.html index.htm;
server_name 192.168.1.6;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.php?$query_string;
}
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}

Tuning Laravel+Nginx in Debian. Routing

Does not work even
Route::get ('foo', function () {
return 'Hello World';
});
in the web.php file - returns 404
My url http://localhost/project/public/foo
Laravel 5.4
Here is my /etc/nginx/sites-available/default file:
# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server;
root /srv/www;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include /etc/nginx/fastcgi.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1;
fastcgi_index index.php;
}
}
Any help for me.
root is in the wrong directory for laravel.
it should be /srv/www/project/public
Need root /srv/www/project/public/; and try_files $uri $uri/ /index.php$is_args$args;

url\whatever.php nginx 404 error instead of laravel 404 error

I have installed laravel with Nginx using Ubuntu. Everything is working fine so far except for one problem. When a user insert any url like domain.com/user/whatever.php nginx response with 404 error page of its own instead of showing the laravel 404 page.
what am I missing in my nginx config?
my nginx config file:
server {
listen 80;
server_name ip domainFotcom wwwDotdomainDotcom;
return 301 https://domainDotcom$request_uri;
}
server {
listen 443 ssl http2;
server_name ip wwwDotdomainDotcom;
return 301 $scheme://domainDotcom$request_uri;
}
# Default server configuration
#
server {
#listen 80 default_server;
#server_name ip domainDotcom wwwDotdomainDotcom;
#listen [::]:80 default_server;
# SSL configuration
#
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
root /var/www/domain/public;
# Add indexDotphp to the list if you are using PHP
index indexDotphp indexDothtml indexDothtm indexDotnginx-debianDOthtml;
server_name domainDotcom;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
try_files $uri $uri/ /indexDotphp?$query_string;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
location ~ /.well-known {
allow all;
}
}
As I understand it, if a file ends with ".php" nginx tries to send it to php engine. Then, if the file doesn't exist, php engine throw 404 at nginx-level. You should catch and redirect it to php engine again:
server {
listen 80;
listen [::]:80;
root /var/www/path/public;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name domain.com www.domain.com;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri #missing;
# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi.conf;
}
location #missing {
rewrite ^ /error/404 break;
try_files $uri $uri/ /index.php?$query_string;
}
}
Use the pretty URLs nginx config from the Laravel docs:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
Source: https://laravel.com/docs/5.4/installation#pretty-urls
You also need to ensure you have a 404 error page set up under resources/views/errors/404.blade.php, as mentioned in the docs:
Laravel makes it easy to display custom error pages for various HTTP status codes. For example, if you wish to customize the error page for 404 HTTP status codes, create a resources/views/errors/404.blade.php. This file will be served on all 404 errors generated by your application.
Read further here: https://laravel.com/docs/5.4/errors#http-exceptions
replace this
try_files $uri $uri/ /index.php?$query_string;
with
try_files $uri $uri/ /index.php$is_args$args;
after that run
sudo service nginx restart

Can't Depoly laravel on digitalocean nginx

So I followed this instruction step by step to deploy my laravel project into digitalocean ,but instead of creating a new laravel project ,I cloned my own project from gitlab
at the end I opened my website and I got the default html page
Please log into your droplet via SSH to configure your LEMP installation.
here is my nginx file :
# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /var/www/tooran/public;
index index.php index.html index.htm;
# Make site accessible from http://localhost/
server_name 162.243.39.12;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.php?$query_string;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
So I contact digitalocean and they told me to edit /etc/nginx/sites-enabled/digitalocean instead of /etc/nginx/sites-available/default
p.s: make sure that you have .env file in your laravel folder too
Don't know about your example but here you can find great tutorial for LEMP stack. Make sure you change strings root /var/www/html; to root /var/www/your_project/public; and
location / {
try_files $uri $uri/ =404;
}
to
location / {
try_files $uri $uri/ /index.php?$query_string;
}
in /etc/nginx/sites-available/defaultfile.

Resources