Reputation: 840
I have and old project that now requires new functionality, I'm going to use laravel to provide it, everything in working ok in xampp with apache but my server con nginx show me access denied message and cant access my routes, how should be my site config should be if laravel is installed in mysite.com/2015 my site config is the following, what showld I change? I have tried
location /newsection/ {
try_files $uri $uri/ /newsection/public/index.php$request_uri;
}
but it causes 500 error
server {
listen 80;
server_name am2.aminversiones.com;
root /home/forge/am2.aminversiones.com;
# FORGE SSL (DO NOT REMOVE!)
# ssl_certificate;
# ssl_certificate_key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
index index.html index.htm index.php;
charset utf-8;
client_max_body_size 300M;
location / {
#try_files $uri $uri/ /index.php?$query_string;
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
access_log off;
error_log /var/log/nginx/am2.aminversiones.com-error.log error;
error_page 404 /index.php;
location ~ \.php$ {
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;
}
# Remove trailing slash to please routing system.
if (!-d $request_filename) {
rewrite ^/(.+)/$ /$1 permanent;
}
# version 1
location ^~ /2015 {
alias /home/forge/am2.aminversiones.com/2015/public;
try_files $uri $uri/ @2015;
location ~* \.php {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(.*)$;
include /etc/nginx/fastcgi_params;
}
}
location @2015 {
rewrite ^/2015/(.*)$ /2015/index.php/$1 last; # THIS IS THE IMPORTANT LINE
}
# end version 1
# version 2
# this is with `ln -s /home/tom/public_html/demos/demo1/public <document root>/demo1`
location ~ /2015 {
try_files /2015/$uri /2015/$uri/ /2015/index.php?q=$uri&$args;
}
# end version 2
# PHP FPM configuration.
location ~* \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
include /etc/nginx/fastcgi_params;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# We don't need .ht files with nginx.
location ~ /\.ht {
deny all;
}
}
Upvotes: 24
Views: 48940
Reputation: 111
In the server directive, specify the public folder in the root parameter
in file /etc/nginx/sites-available/am2.aminversiones.com
server {
...
root /home/forge/am2.aminversiones.com/public;
...
}
restart the nginx service: sudo systemctl restart nginx
Upvotes: 0
Reputation: 227
I have met several case like error 403 or 404, and I think this method works. Don't forget to change php version based on your php version in server (php8.1-fpm.sock
). Note your_domain www.your_domain
is based on your website.
server {
listen 80;
listen [::]:80;
root /var/www/html;
index index.html index.htm index.php;
server_name your_domain www.your_domain;
location / {
try_files $uri $uri/ /index.php?$args;
}
location /yourlaravelproject {
alias /var/www/html/yourlaravelproject/public;
try_files $uri $uri/ /index.php$args;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
after you configure, don't forget to add this to your symlink, then systemctl restart nginx
. I'm sure for Laravel 8 and 9 still works, because I just recently test Laravel 9 project in subfolder and works fine.
Upvotes: 0
Reputation: 3615
after I spend some hours on this issue, finally I fixed my problem with a subdomain address like this:
If you want to put your laravel
project in a subfolder
on a server with ngnix-ubuntu 16-php.7.2
, so here is the ngnix config :
your nested(subfolder) isn't inside your main folder
/var/www/main: /var/www/nested:
then your config should be :
location /nested {
alias /var/www/nested/public;
try_files $uri $uri/ @nested;
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
}
location @nested {
rewrite /nested/(.*)$ /nested/index.php?/$1 last;
}
The laravel-test folder (subfolder) inside the main folder :
/var/www/main: /var/www/main/nested:
then your config should be :
location /laravel-test {
alias /var/www/main/laravel-test/public;
try_files $uri $uri/ @laravelTest;
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
}
location @laravelTest {
rewrite /laravel-test/(.*)$ /laravel-test/index.php?/$1 last;
}
Upvotes: 21
Reputation: 472
This is the workaround that solved my problem With alias, Nginx does NOT look for files within /var/www/portal/public/portal/foo, like it would with the root directive
location /portal {
alias /var/www/html/portal/public; #preferred over root
# @portal is a named location
try_files $uri $uri/ @portal;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
location @portal {
rewrite /portal/(.*)$ /portal/index.php last; # Remove ?/$1 since fastcgi_params adds query string
}
Additional reference can be found from this article https://gist.github.com/tsolar/8d45ed05bcff8eb75404
Upvotes: 10
Reputation: 41
For some reason for me, the alias was causing the issue and didn't work. So maybe this will help others, so here is what I did to make this work. As you can see I took the "alias" out of it and added laravel/public to the equation.
location ^~ /laravel/public {
index home.php home.html home.htm index.html index.htm index.php;
try_files $uri $uri/ @laravel;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
charset utf-8;
location ~ \.php {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
include fastcgi_params;
}
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
location @laravel {
rewrite /laravel/public/(.*)$ /laravel/public/index.php?/$1 last;
}
Upvotes: 2
Reputation: 1
location /stationery { alias /var/www/html/stationery/public; try_files $uri $uri/ @stationery; location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $request_filename; } }
location @stationery{ rewrite /stationery/(.*)$ /stationery/index.php?/ last; }
Upvotes: -2
Reputation: 801
it did not work for me, so I got another solution.
I had created a "normal" laravel domain, point to http://generic.laravel root /my/laravel/path/public
After that, I created a location on real domain proxying to my generic Laravel:
location /laravel {
rewrite /laravel/?(.*)$ /$1 break;
proxy_pass http://generic.laravel;
}
Unfortunately, Laravel is going to use the url http://generic.laravel to create links. You may to solve it following this steps Laravel: Change base URL?
Upvotes: 1
Reputation: 840
Well, I found a solution to very easy config and install Laravel in a subdirectory in a nginx server, in the /etc/nginx/sites-available/yourSite config file, add this:
location ^~ /laravel {
alias /var/www/laravel/public;
try_files $uri $uri/ @laravel;
location ~ \.php {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(.*)$;
include /etc/nginx/fastcgi_params;
}
}
location @laravel {
rewrite /laravel/(.*)$ /laravel/index.php?/$1 last;
}
and voila, your routes will work normally how they should.
Upvotes: 30