![nginx:[警告]伺服器名稱衝突](https://rvso.com/image/726392/nginx%EF%BC%9A%5B%E8%AD%A6%E5%91%8A%5D%E4%BC%BA%E6%9C%8D%E5%99%A8%E5%90%8D%E7%A8%B1%E8%A1%9D%E7%AA%81.png)
我一直無法弄清楚為什麼會出現此錯誤:
nginx: [警告] 0.0.0.0:80 上有衝突的伺服器名稱“stage.mydomain.com”,被忽略nginx: [警告] 0.0.0.0:443 上有衝突的伺服器名稱“stage.mydomain.com”,被忽略
我的啟用網站的符號連結檔案看起來像。我對此不是很熟悉,但我是唯一對伺服器有所了解的人。這是從生產中複製過來的。我看到連接埠 80 和 443 是重複的,但每個區塊中存在一些配置差異。
server {
listen 80;
server_name stage.mydomain.com;
return 301 https://stage.mydomain.com$request_uri$is_args;
}
server {
listen 80;
server_name stage.mydomain.com;
location '/.path/here' {
default_type "text/plain";
root /home/username/www/app_name/current/public;
}
return 301 https://stage.mydomain.com$request_uri$is_args;
}
server {
listen 443;
ssl on;
ssl_certificate /a/path/to/my/file.pem;
ssl_certificate_key /a/path/to/my/key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
##ssl_ciphers HIGH:!aNULL:!MD5;
ssl_ciphers "randomstuffhere";
ssl_prefer_server_ciphers on;
client_max_body_size 32000M;
server_name stage.mydomain.com;
return 301 https://stage.mydomain.com$request_uri;
}
server {
listen 443;
ssl on;
ssl_certificate /a/path/to/my/file.pem;
ssl_certificate_key /a/path/to/my/key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
##ssl_ciphers HIGH:!aNULL:!MD5;
ssl_ciphers "randomstuffhere";
ssl_prefer_server_ciphers on;
client_max_body_size 32000M;
server_name stage.mydomain.com;
root /home/username/www/app_name/current/public; # <--- be sure to point to 'public'!
passenger_enabled on;
rails_env staging;
}
答案1
不能有 2 個伺服器語句使用相同的 server_name。如果有請求進來,Nginx 不知道該使用哪一個,因為兩者共享相同的虛擬主機名稱。因此 nginx 將使用第一個符合項。
從您的設定片段來看,您似乎可以刪除第二個伺服器連接埠 80 語句,因為根目錄是無用的,因為您無論如何都在進行重新導向(這與第一個伺服器語句相同)
同時刪除第一個 server 443 語句,因為這會導致重定向循環到自身。