Назад | Перейти на главную страницу

Как перенести мой сервер Apache на Nginx?

У меня есть сервер Apache на Ubunu 18.04 с сайтом Drupal 8, который я хочу перенести на Nginx и PHP7.3-FPM.

Это единственный сайт на сервере. Я вообще не знаю Nginx.

Я удалил Apache с помощью следующей команды:

sudo apt autoremove --purge apache2*

Вот конфигурация, которая у меня была на Apache:

<VirtualHost *:80>
   ServerAdmin contact@domaine.com
   ServerName domaine.com
   ServerAlias www.domaine.com
   Protocols h2 http/1.1
   DocumentRoot /var/www/www-domaine-com/web/

   <Directory /var/www/www-domaine-com/web>
      Options +Includes -Indexes +FollowSymLinks
      AllowOverride All
      Require all granted
   </Directory>

   <FilesMatch \.php$>
      SetHandler "proxy:unix:/var/run/php/php7.3-fpm.sock|fcgi://localhost/"
   </FilesMatch>

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Вот как я установил Nginx:

sudo apt install nginx
sudo ufw allow in "Nginx HTTP"

Я тестирую IP-адрес своего сервера, и отображается страница Nginx.

sudo unlink /etc/nginx/sites-enabled/default

Вот моя конфигурация Nginx:

server {
    listen :80;
    listen [::]:80;
    server_name domaine.com www.domaine.com;

    root   /var/www/www-domaine-com/web;
    index  index.html index.php;

    location / {
        try_files $uri $uri/ =404;
    }
    location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            include fastcgi_params;
            fastcgi_pass unix:/run/php/php7.3-fpm.sock;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Создаю символическую ссылку своей новой конфигурации:

sudo ln -s /etc/nginx/sites-available/www.domaine.com /etc/nginx/sites-enabled/

Тестирую свою конфигурацию:

sudo nginx -t

Отображается это сообщение:

nginx: [emerg] no host in ":80" of the "listen" directive in /etc/nginx/sites-enabled/www-domaine-com:2
nginx: configuration file /etc/nginx/nginx.conf test failed

Сообщение об ошибке показывает, что в указанной строке конфигурации nginx есть ошибка.

    listen :80;

Это опечатка; он должен выглядеть так:

    listen 80;

Основываясь на нашем кратком обсуждении в комментариях, я могу предположить, что есть еще один server блокировать в /etc/nginx/nginx.conf который действует как сервер по умолчанию, поэтому, когда вы получаете доступ к нему по IP, nginx обслуживает этот server блок вместо того, который вы настроили в /etc/nginx/sites-available/www-s1biose-com. Вы можете удалить это server блокировать от nginx.conf, или просто удалите default_server из server_name директиву в нем и добавить default_server к server_name в вашей конфигурации.

Вы не указываете, какой дистрибутив вы используете, но также проверяете, что nginx.conf файл включает файлы из /etc/nginx/sites-available/. CentOS по умолчанию не работает, я не уверен в Ubuntu / Debian и других.

Что касается того, почему вы получаете отказ в соединении при доступе по доменному имени (которое должно работать, поскольку оно соответствует server_name в вашей конфигурации), убедитесь, что ваше разрешение DNS указывает на правильный IP-адрес, и убедитесь, что ваш браузер не пытается использовать HTTPS вместо HTTP, поскольку вы не настроили HTTPS.