Ubuntu

nginx:一台伺服器上的多個網站

  • May 1, 2017

我希望從一台伺服器上提供三個網站。伺服器是 digitalocean 上的 Ubuntu droplet,網站位於我的主目錄~/site1 ~/site2~/site3. 我有帶股票的 nginx nginx.conf。我在sites-available( site1.com site2.com& site3.com) 中有三個文件在每個文件中,根據每個相應的站點,它們具有以下結構:

server {
   listen 80;
   listen [::]:80;
   root /home/user/site1;
   index.html
   server_name site1.com *.site1.com
   return 301 https://$server_name$request_uri;
}

這三個文件sites-enabled在兩者中都進行了符號連結,sites-enabled並且文件被刪除。此外,站點 2 已附加到兩行的末尾sites-available``default``default_server``listen

Nginx 啟動正常,沒有錯誤:

$ sudo nginx -t
$ service nginx restart

但是當我訪問各個網站時,他們都將我引導回 default_server site2 網站。網站域名是在 godaddy.com 上購買的,並且都指向該伺服器的 IP。

我該如何解決這個問題,以便每個網站都能正確重定向?我對這方面的事情還很陌生,而且是自學的,所以如果可能的話,一點解釋會很有幫助。

以下地方幫助我達到了上述目的:

Nginx 阻止多個域將所有流量重定向到 https?

域重定向到 nginx 中的錯誤站點,配置文件中的多個站點

https://www.digitalocean.com/community/questions/multiple-sites-using-nginx

https://stackoverflow.com/questions/11693135/multiple-websites-on-nginx-sites-available

編輯: 我現在嘗試的額外內容是:

  • return 301 https://$server_name$request_uri;從每個文件伺服器塊中刪除了該行。
  • 從多個瀏覽器和設備清除記憶體。
  • 將根路徑更改為/var/www/html/site1-2-3
  • 添加SERVERIP site1.com, SERVERIP site2.com,SERVERIP site3.com/etc/hosts

行為仍然沒有變化,仍然重定向到預設伺服器

EDIT2: 以下是完整的配置文件:

/etc/nginx/sites-available/site1.com

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

       root /home/deploy/site1;

       index index.html index.htm index.nginx-debian.html;

       server_name site1.com *.site1.com;

       location / {
               try_files $uri $uri/ =404;
       }
}

/etc/nginx/sites-available/site2.com

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

       root /home/deploy/site2/current/_site;

       index index.html index.htm index.nginx-debian.html;

       server_name site2.com *.site2.com;

       location / {
               try_files $uri $uri/ =404;
       }
}

/etc/nginx/sites-available/site3.com

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

       root /home/deploy/site3;

       index index.html index.htm index.nginx-debian.html;

       server_name site3.com *.site3.com;

       location / {
               try_files $uri $uri/ =404;
       }
}

/etc/nginx/nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
       worker_connections 768;
       # multi_accept on;
}

http {

       ##
       # Basic Settings
       ##

       sendfile on;
       tcp_nopush on;
       tcp_nodelay on;
       keepalive_timeout 65;
       types_hash_max_size 2048;
       # server_tokens off;

       server_names_hash_bucket_size 64;
       # server_name_in_redirect off;

       include /etc/nginx/mime.types;
       default_type application/octet-stream;

       ##
       # SSL Settings
       ##

       ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
       ssl_prefer_server_ciphers on;

       ##
       # Logging Settings
       ##

       access_log /var/log/nginx/access.log;
       error_log /var/log/nginx/error.log;

       ##
       # Gzip Settings
       ##

       gzip on;
       gzip_disable "msie6";

       # gzip_vary on;
       # gzip_proxied any;
       # gzip_comp_level 6;
       # gzip_buffers 16 8k;
       # gzip_http_version 1.1;
       # gzip_types text/plain text/css application/json application/javascript text/xml app$

       ##
       # Virtual Host Configs
       ##

       include /etc/nginx/conf.d/*.conf;
       include /etc/nginx/sites-enabled/*;
}


#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
#
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}

EDIT3 我注意到 nginx 的版本是 1.10.3,這不是最新的,所以我用 apt-get remove purge 等刪除了它。然後我從原始碼 1.12.0 下載並建構了整個 ./configure,make , make install 過程,它依賴於其他一些包,但是一旦完成並且伺服器塊到位,包含在 中nginx.conf,我仍然有同樣的問題,重定向到 default_server。

解決這個問題的方法不是在伺服器本身的設置上,而是實際上是兩件事,它們是:

  1. 在 godaddy 界面上添加指向 ns1.digitalocean.com、ns2.digitalocean.com 和 ns3.digitalocean.com 的自定義名稱伺服器 godaddy_screenshot
  2. 在 digitalocean 界面上,在網路選項卡下,將域添加到三個網站。 digitalocean_screenshot

完成後,等待幾個小時,一切正常。

我不相信這會有所幫助,但值得一試。在評論中格式化太難了。如果它不起作用,請告訴我,我會考慮更多或刪除答案。

它基本上是一個超級簡單的配置,沒有什麼特別的。

server {
   server_name site1.com www.site1.com;
   listen 80;

   root /home/deploy/site1;
   try_files $uri $uri/ =404;

   index index.html index.htm index.nginx-debian.html;
}

此外,如果它不起作用,請將您的 default_server 語句移動到另一台伺服器,然後檢查所有三個站點。我只是想確保它按預期更改。

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