Проблемы с конфигурацией Nginx

Вопрос или проблема

У меня возникло много проблем с правильным отображением моего сайта 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 через сокеты.

Пример

Основные компоненты вашей конфигурации описаны ниже. Вам удалось разобраться с символьной ссылкой, что уже является важным шагом к решению проблемы.

  1. Символьные ссылки:

    ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/

    Ошибки здесь могут возникать из-за неправильного пути или неверного указания комбинации источника и назначения.

  2. Права доступа:

    • Каталог /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.
  3. Конфигурация сервера (server block):

    • Ваш виртуальный хост настроен на прослушивание порта 80, и указан корневой каталог, в который сервер будет подавать файлы.
  4. Обработка PHP-Файлов:

    • Убрать try_files из блока .php, так как .php файлы должны напрямую обрабатываться через PHP-FPM:
      location ~ \.php$ {
       include snippets/fastcgi-php.conf;
       fastcgi_pass unix:/run/php/php7.0-fpm.sock;
      }
  5. Отладка логов:

    • Логи ошибок не содержат критических ошибок, но это может указывать на проблемы с символьными ссылками или доступами.

Применение

Теперь, когда основные теоретические знания и примеры рассмотрены, можно приступить к применению:

  1. Проверка символьных ссылок: Убедитесь, что они ведут на действительно существующие и корректные файлы конфигурации в sites-available. Используйте ls -l для верификации.

  2. Осмотр прав доступа: Проверьте, что все задействованные файлы и каталоги имеют правильные права и владельца. Изменения можно внести с помощью chown и chmod. Например:

    chown -R www-data:www-data /var/www/subdomain.mydomain.com
  3. Тест и перезагрузка конфигурации: После внесения изменений всегда проверяйте конфигурацию на синтаксические ошибки:

    sudo nginx -t

    Если ошибок не обнаружено, перезагрузите Nginx:

    sudo systemctl reload nginx
  4. Проверка сетевых настроек: Убедитесь, что порт 80 открыт в брандмауэре и разрешен в группах безопасности AWS. Используйте netstat или ss для проверки слушающих портов.

Следуя этим рекомендациям, вы сможете достичь стабильной работы вашего веб-сайта с Nginx. Ваша ситуация также подчеркнула важность точности в создании символьных ссылок и управления разрешениями. Каждый шаг отладки, тестирования и проверки играет критически важную роль в конечном успехе развертывания веб-приложения.

Оцените материал
Добавить комментарий

Капча загружается...