Вопрос или проблема
У меня возникло много проблем с правильным отображением моего сайта Nginx.
Я получал ошибки 404
, а теперь я получаю ошибку Connection Refused
.
Это моя конфигурация Nginx
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_names_hash_bucket_size 64;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Он включает две другие папки, conf.d пустая, а sites-enabled содержит символические ссылки на мою конфигурацию Vhost, которая представлена ниже.
server {
listen 80;
listen [::]:80;
root /var/www/subdomain.mydomain.com;
index index.php;
server_name subdomain.mydomain.com www.subdomain.mydomain.com;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php
fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~/\.ht {
deny all;
}
}
Указанная папка Root существует и содержит файл index.php, который в данный момент просто выводит строку.
Логи ошибок nginx показывают только следующее:
2016/11/24 22:35:40 [notice] 8834#8834: signal process started
2016/11/24 22:38:30 [notice] 8890#8890: signal process started
2016/11/24 23:13:48 [notice] 10108#10108: signal process started
2016/11/24 23:14:16 [notice] 10141#10141: signal process started
PHP-FPM установлен и сокет существует в указанной директории, и FPM на самом деле работает, в любом случае это не похоже на проблему с PHP.
Это оставляет либо саму конфигурацию, либо разрешения, возможно?
Как я уже сказал, мой проект находится в каталоге /var/www
Разрешения для которого выглядят так
drwxr-sr-x 2 www-data www-data 4096 Nov 24 23:31 subdomain.mydomain.com
Файл index внутри него:
-rw-rw-r-- 1 myusername www-data 25 Nov 24 23:50 index.php
Сайты работают в экземпляре AWS.
Я уже разрешил порт 80 в группах безопасности, и доступ установлен как разрешенный откуда угодно.
Если кто-то может помочь мне, я был бы очень признателен, так как я уже третий час пытаюсь разобраться… 🙁
Вам не нужно try_files
в вашем разделе location ~ \.php$
. Вы просто передаете обработку напрямую к процессу PHP-FPM.
Наконец-то разобрался… я создал неправильную символическую ссылку в Ubuntu для папки sites-enabled.
Я не совсем помню, что сделал неправильно, но явный признак неправильной символической ссылки – это когда он говорит, что у вас нет разрешения на её редактирование даже с sudo. Если это происходит, ваша символическая ссылка неверна, и вам нужно её пересоздать, иначе ваши сайты не будут работать.
Надеюсь, моя ошибка сможет кому-то помочь в будущем, спасибо всем за помощь 🙂
Ответ или решение
Ваша проблема с конфигурацией Nginx может быть обусловлена несколькими факторами, связанными с настройками сервера и разрешениями. Давайте разберём это последовательно, используя теорию, примеры и их применение для эффективного решения проблемы.
Теория
Nginx исполняет роль обратного прокси-сервера и веб-сервера, что позволяет оптимизировать обработку запросов и поддерживать различные веб-приложения. Основные аспекты его конфигурации включают настройку путей к документам, сервер-хостов, разрешений и параметров соединения PHP-FPM. Типичные проблемы возникают из-за некорректных символьных ссылок, конфигураций виртуальных хостов, а также настроек разрешений на каталоги и файлы.
Важно учитывать, что Nginx операционирует с правами пользователя, указанного в его конфигурации (в вашем случае это www-data), что требует корректной настройки прав доступа к корневым директориям и файлам. Кроме того, обработка PHP-запросов требует правильной интеграции с PHP-FPM через сокеты.
Пример
Основные компоненты вашей конфигурации описаны ниже. Вам удалось разобраться с символьной ссылкой, что уже является важным шагом к решению проблемы.
-
Символьные ссылки:
ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/
Ошибки здесь могут возникать из-за неправильного пути или неверного указания комбинации источника и назначения.
-
Права доступа:
- Каталог
/var/www/subdomain.mydomain.com
имеет праваdrwxr-sr-x 2 www-data www-data
, что является достаточным, при условии, что Nginx выполняется с правамиwww-data
. - Файл
index.php
с правами-rw-rw-r-- 1 myusername www-data
также должен быть доступен для чтения пользователюwww-data
.
- Каталог
-
Конфигурация сервера (server block):
- Ваш виртуальный хост настроен на прослушивание порта 80, и указан корневой каталог, в который сервер будет подавать файлы.
-
Обработка PHP-Файлов:
- Убрать
try_files
из блока.php
, так как .php файлы должны напрямую обрабатываться через PHP-FPM:location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.0-fpm.sock; }
- Убрать
-
Отладка логов:
- Логи ошибок не содержат критических ошибок, но это может указывать на проблемы с символьными ссылками или доступами.
Применение
Теперь, когда основные теоретические знания и примеры рассмотрены, можно приступить к применению:
-
Проверка символьных ссылок: Убедитесь, что они ведут на действительно существующие и корректные файлы конфигурации в
sites-available
. Используйтеls -l
для верификации. -
Осмотр прав доступа: Проверьте, что все задействованные файлы и каталоги имеют правильные права и владельца. Изменения можно внести с помощью
chown
иchmod
. Например:chown -R www-data:www-data /var/www/subdomain.mydomain.com
-
Тест и перезагрузка конфигурации: После внесения изменений всегда проверяйте конфигурацию на синтаксические ошибки:
sudo nginx -t
Если ошибок не обнаружено, перезагрузите Nginx:
sudo systemctl reload nginx
-
Проверка сетевых настроек: Убедитесь, что порт 80 открыт в брандмауэре и разрешен в группах безопасности AWS. Используйте
netstat
илиss
для проверки слушающих портов.
Следуя этим рекомендациям, вы сможете достичь стабильной работы вашего веб-сайта с Nginx. Ваша ситуация также подчеркнула важность точности в создании символьных ссылок и управления разрешениями. Каждый шаг отладки, тестирования и проверки играет критически важную роль в конечном успехе развертывания веб-приложения.