nginx:一台伺服器上的多個網站
我希望從一台伺服器上提供三個網站。伺服器是 digitalocean 上的 Ubuntu droplet,網站位於我的主目錄
~/site1
~/site2
和~/site3
. 我有帶股票的 nginxnginx.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。
我該如何解決這個問題,以便每個網站都能正確重定向?我對這方面的事情還很陌生,而且是自學的,所以如果可能的話,一點解釋會很有幫助。
以下地方幫助我達到了上述目的:
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。
解決這個問題的方法不是在伺服器本身的設置上,而是實際上是兩件事,它們是:
- 在 godaddy 界面上添加指向 ns1.digitalocean.com、ns2.digitalocean.com 和 ns3.digitalocean.com 的自定義名稱伺服器 godaddy_screenshot
- 在 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 語句移動到另一台伺服器,然後檢查所有三個站點。我只是想確保它按預期更改。