我有一个网站在 Nginx Web 服务器上运行,该服务器通过 HTTPS 运行。我最近注意到有人将他们的域名指向我的 Web 服务器,并且 Nginx 正在将我的网站提供给这个坏域名。它看起来甚至在 Google 中编入索引...
Nginx 配置:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key;
root /var/www/example.com;
index index.html;
}
我尝试添加一条if
语句来检查是否$host
符合server_name
建议这里
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key;
# Check if incoming hostname matches server_name
if ($host != $server_name) {
# If not, return 404
return 404;
}
root /var/www/example.com;
index index.html;
}
这项添加似乎没有帮助。这一切是否正确?任何建议都将不胜感激
答案1
我有一个网站在 Nginx Web 服务器上运行,该服务器通过 HTTPS 运行。我最近注意到有人将他们的域名指向我的 Web 服务器,并且 Nginx 正在将我的网站提供给这个坏域名。它看起来甚至在 Google 中编入索引...
处理这种情况或类似情况的最佳方法是创建一个默认 catchall 服务器块。例如,以下是我必须为指向我的服务器 IP 的其他域名提供服务。
server {
listen 80 default_server;
server_name _;
# deny all
location / {
return 403;
}
}
我希望这能有所帮助!
答案2
创建一个万能服务器是最好的选择。您可以return 404;
按照建议进行操作,或者将所有内容重定向到规范主机名;这样可以解决搜索引擎的问题。
这是我的完整配置的替代方案:
server {
# catch-all server for both http and https
listen *:80 default_server;
listen *:443 default_server;
server_name _;
# Your SSL configuration
ssl_certificate /etc/nginx/ssl/example.com/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key;
# Redirect to canonical site
rewrite ^/(.*)$ http://example.com/$1 permanent;
}