Ubuntu

如何將我的 Apache 伺服器遷移到 Nginx?

  • March 1, 2019

我在 Ubunu 18.04 上有一個 Apache 伺服器,有一個 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。

引用自:https://serverfault.com/questions/955889