Проблема
Я не эксперт по Nginx, но мне кажется, что все директивы location
должны быть внутри директивы server
, и в настоящее время это не так.Также у вас есть вложенные директивы location
, которые, я думаю, не нужны ...
Начните с попытки исправить это следующим образом:
server {
listen xx.xxx.xxx.xx:443;
server_name example.com www.example.com;
root /home/admin/web/example.com/public_html;
index index.php index.html index.htm;
access_log /var/log/nginx/domains/example.com.log combined;
access_log /var/log/nginx/domains/example.com.bytes bytes;
error_log /var/log/nginx/domains/example.com.error.log error;
ssl on;
ssl_certificate /home/admin/conf/web/ssl.example.com.pem;
ssl_certificate_key /home/admin/conf/web/ssl.example.com.key;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {
expires max;
}
location ~ \.php$ {
# https://nealpoole.com/blog/2011/04/setting-up-php-fastcgi-and-nginx-dont-trust-the-tutorials-check-your-configuration/
#try_files $uri =404;
#try index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#fastcgi_pass php:9000;
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
}
error_page 403 /error/404.html;
error_page 404 /error/404.html;
error_page 500 502 503 504 /error/50x.html;
location /error/ {
alias /home/admin/web/example.com/document_errors/;
}
location ~* "/\.(htaccess|htpasswd)$" {
deny all;
return 404;
}
location /vstats/ {
alias /home/admin/web/example.com/stats/;
include /home/admin/conf/web/example.com.auth*;
}
include /etc/nginx/conf.d/phpmyadmin.inc*;
include /etc/nginx/conf.d/phppgadmin.inc*;
include /etc/nginx/conf.d/webmail.inc*;
include /home/admin/conf/web/nginx.example.com.conf*;
}
ПРИМЕЧАНИЕ: Это не проверено, поэтому попробуйте его в разработке, и если вы исправите какой-либо синтаксис в файле или ошибку, пожалуйста, дайте мне знать, чтобы я мог обновить ответ.Если вы не можете исправить, пожалуйста, сообщите нам, что пошло не так, чтобы мы могли попробовать дальнейшую помощь.
Возможное улучшение
После использования Laravel вы можете попытаться следовать конфигурации Nginx Php Docker Stack , который работает прямо из коробки с Laravel.
Бит, который вам нужно скопировать для замены текущего в вашей директиве Nginx conf server{}
, следующий:
# In Laravel we only need serve index.php
location @proxyphp {
rewrite (.*) /index.php;
}
# serving only index.php increases the security in your application.
location ~ /index\.php$ {
# https://nealpoole.com/blog/2011/04/setting-up-php-fastcgi-and-nginx-dont-trust-the-tutorials-check-your-configuration/
#try_files $uri =404;
#try index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
}
# Deny access to all php files that are not index.php
location ~ \.php$ {
deny all;
}
Улучшения безопасности
В Laravel нам нужно только обслуживать index.php, и это повышает безопасность вашего приложения, если у него есть только одна общедоступная точка входа вместо того, чтобы быть доступнойлюбым *.php
в папке public
приложения Laravel.