Nginx

域和子域的 Nginx 配置

  • November 27, 2019

我是 Nginx 的新手。

我的主要目標是為一個域託管兩個網站。我想要一個與主域分開託管的子域,例如:

  • example.com 來自/home/user/Documents/vue_website/dist
  • subdomain.example.com 來自/var/www/html

因為我在一台伺服器上執行這一切,我相信這無法完成,因為它們具有相同的 IP 地址。

我現在正試圖通過使用子目錄來解決這個問題。如果我訪問 example.com/wp,它應該顯示第二個站點。

目前的 Nginx 站點配置如下所示:

server {
   listen 80 default_server;
   listen [::]:80 default_server;

   return 301 https://my-domain.com$request_uri;
}

server {
   access_log /var/log/nginx/scripts.log scripts;

   listen 443 ssl http2;
   listen [::]:443 ssl http2;

   ssl_certificate /etc/ssl/my-domain.com.pem;
   ssl_certificate_key /etc/ssl/_.my-domain.com_private_key.key;
   server_name my-domain.com www.my-domain.com;
  location / {

           root /home/pi/Documents/vue_website/dist;
           index index.html;
   }

   location /wp {
           root /var/www/html/;

           location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass 172.0.0.1:9000;
                fastcgi_index index.php;
                include fastcgi_params;
           }
   }

}

但這不起作用。我將不勝感激任何幫助。

編輯: 所以我現在讓子域工作。但現在的問題是我只能通過 ssl / 在前面輸入 https 來訪問它,這是我不想要的。

所以現在我正在嘗試根據搜尋到的域將 http 請求重定向到給定的站點

例如,如果我去http://my-domain.com將我重定向到 https 等等。

我得到的程式碼如下:

       'my-domain.com' '1';
       'wp.my-domain.com' '2';
}

server {
       listen 80;

       if ($new = '1') {
               return 301 https://my-domain.com$request_uri;
       }

       if ($new = '2') {
               return 301 https://wp.my-domain.com$request_uri;
       }
}

我在程式碼中是否有問題,因為在我看來,如果我理解正確,它應該像那樣工作。

您認為您不能在一個 IP 上託管多個網站的假設是不正確的。您可以使用 http 或 https 在 IP 上託管任意數量的網站。如果您願意,還可以使用子文件夾託管不同的內容。

配置子域相當簡單,您只需使用兩個伺服器塊

server {
 server_name example.com;
 listen 443 ssl http2;
 // Add other required SSL entries
 root     /var/www/site1;
}

server {
 server_name subdomain.example2.com;
 listen 443 ssl http2;
 // Add other required SSL entries
 root     /var/www/site2;
}

使用子文件夾配置你這樣做

server {
 server_name example.com;
 listen 443 ssl http2;
 // Add other required SSL entries
 location / {
   root     /var/www/site1;
 }
 location /subdir {
   root     /var/www/site2;
 }
}

如果您需要進一步的幫助,請編輯您的問題並向我們提供比“它不起作用”更詳細的資訊。理想情況下,您將共享 URL 的捲曲、匹配的訪問和錯誤日誌條目、有用的 PHP/應用程序日誌以及預期的行為。

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