У меня есть следующий файл конфигурации nginx
##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##
# Default server configuration
#
server {
root /var/www/open_final/current;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name app.mypersonaldomain.co;
if ($http_x_forwarded_proto != "https") {
rewrite ^(.*)$ https://$server_name$REQUEST_URI permanent;
}
# if ($http_user_agent ~* '(iPhone|iPod|android|blackberry)') {
# return 301 https://mobile.mypersonaldomain.co;
# }
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.html;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
}
server {
root /var/www/open-backend-v2/current/public;
index index.php index.html index.htm;
server_name localhost v2-api.mypersonaldomain.co;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
У меня на сервере nginx запущено два приложения. Одно из них - это приложение Laravel (PHP) и приложение Angular (Front-end). Я заметил, что на прошлой неделе все маршруты серверных приложений (PHP) начали выдавать ошибку 404 Not Found. Я перезапустил свой nginx, но он все еще приближался. Наконец я перезапустил свой экземпляр aws, и он начал работать нормально. Вчера снова внезапно URL-адреса начали бросать 404, и мне пришлось перезапустить экземпляр.
Внешнее приложение загружалось, но серверные URL-адреса (Laravel-PHP) выдавали 404.
Я подозреваю, что это делает хакер. В последние 2 года этого не происходило, и это началось с прошлой недели.
В чем может быть причина? Это похоже на подделку файла .htaccess или это как-то связано с конфигурацией nginx. Но если да, то почему на маршрутах приложений laravel отображается 404.
Нужна помощь в этом. Что могло быть причиной этого? Кто-нибудь сталкивался с этой проблемой?
Я вижу, вы смешали 2 домена в одном nginx.conf. Это очень запутанно, потому что теперь я понятия не имею, чего вы хотите достичь. Я использую NginX на многих своих веб-серверах, на большинстве из них обслуживается более одного веб-сайта. У меня есть хороший метод, который отлично служит мне годами, позвольте мне поделиться им с вами, чтобы вы могли выглядеть чище.
Сначала отделите nginx.conf от вашего website.conf. Создайте /etc/nginx/sites-available
и /etc/nginx/sites-enable
. В nginx.conf я удаляю все server
блоков, поэтому я знаю, что обслуживаются только веб-сайты, которые я разрешил, и ничего больше. Оставьте только http
и events
блок и все остальное там вроде user
. Закомментируйте свою строку включения в http
block и добавьте новую строку в соответствии с этим:
#include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*.conf;
Теперь создайте новый файл конфигурации /etc/nginx/sites-available/co.mypersonaldomain.mobile.conf
. Добавьте два server
блоки. Первый (если вы хотите перенаправить весь HTTP на HTTPS, должен быть именно таким:
server {
listen 80;
server_name app.mypersonaldomain.co;
return 301 https://$server_name$request_uri;
}
2-й server
block нужно настроить в соответствии с вашими потребностями, я не могу помочь в этом. Но из вашей конфигурации я могу сказать, что вы можете пропустить страницы с ошибками и расположение страниц с ошибками, если только вы не используете специальный файл. В остальном все нормально. Кроме того, огромная рекомендация - использовать пользовательские файлы журналов, а не стандартные журналы NginX, чтобы вы могли легко различать свои веб-сайты на своем сервере и упростить обслуживание. Добавьте эти строки в свой второй server
блокировать
error_log /var/log/nginx/co.mypersonaldomain.mobile/error.log;
access_log /var/log/nginx/co.mypersonaldomain.mobile/access.log main;
После этого вы можете просто связать этот файл конфигурации с sites-enabled
папку с этой командой: ln -s /etc/nginx/sites-available/co.mypersonaldomain.mobile.conf /etc/nginx/sites-enable
. Также не забудьте создать папку для файлов журнала: mkdir /var/log/nginx/co.mypersonaldomain.mobile/
.
Наконец, вы можете протестировать конфигурации NginX, прежде чем активировать их с помощью nginx -t
. Если этот синтаксис верен, просто перезапустите NginX и вуаля.
Моя проблема с вашей целью в том, что v2-api.mypersonaldomain.co
доменное имя. Понятно, что вы пытаетесь использовать это как бэкэнд и использовать для него API, и ваша конфигурация выглядит достаточно круто, просто создайте для нее отдельную конфигурацию также в /etc/nginx/sites-available/co.mypersonaldomain.v2-api.conf
и создайте его для себя. Однако вы перенаправляете пользователей из http://app.mypersonaldomain.co
к https://app.mypersonaldomain.co
но этот домен вообще не обслуживается в вашей текущей конфигурации.
Все ли в порядке с сервисом PHP FPM? Возможно, эта служба аварийно завершает работу и возвращается после перезагрузки.
Проверьте статус службы, если вы получили все сообщения 404, а также журналы