如何将我的 Apache 服务器迁移到 Nginx?

如何将我的 Apache 服务器迁移到 Nginx?

我在 Ubunu 18.04 上有一个 Apache 服务器,上面有一个 Drupal 8 站点,我想将其迁移到 Nginx 和 PHP7.3-FPM。

这是服务器上唯一的站点。我根本不了解 Nginx。

我使用以下命令删除了 Apache:

sudo apt autoremove --purge apache2*

这是我在 Apache 上的配置:

<VirtualHost *:80>
   ServerAdmin [email protected]
   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

答案1

错误消息表明您的 nginx 配置的指定行有错误。

    listen :80;

这是一个拼写错误;它应该显示为:

    listen 80;

答案2

根据我们在评论中的简短讨论,我最好的猜测是,有另一个server/etc/nginx/nginx.conf充当默认服务器,因此当您通过 IP 访问它时,nginx 将提供该server块,而不是您在中配置的块/etc/nginx/sites-available/www-s1biose-com。您可以server从中删除该块nginx.conf,也可以default_server从其中server_name的指令中删除并添加default_serverserver_name您的配置中。

你没有提到你正在使用什么发行版,但也要检查nginx.conf文件是否包含来自的文件/etc/nginx/sites-available/。 CentOS 默认情况下不包含,我不确定 Ubuntu/Debian 和其他版本。

至于为什么通过域名访问时会拒绝连接(它应该可以工作,因为它与server_name您的配置中的指令相匹配),请检查您的 DNS 解析是否指向正确的 IP 地址,并检查您的浏览器没有尝试使用 HTTPS 而不是 HTTP,因为您没有配置 HTTPS。

相关内容