Как перенести мой сервер 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

2 ответа

Решение

Сообщение об ошибке показывает, что у вас есть ошибка в указанной строке вашей конфигурации 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.

Другие вопросы по тегам