nginx 怎么绑定新域名?

这么写后,解析到服务器的所有域名全部跳到https://www.bbxinwen.com,感觉server_name绑定的域名无效?
(删除了目录下默认的default.conf)

server {
    listen 80;
    server_name www.bbxinwen.com;
    return 301 https://www.bbxinwen.com$request_uri;
}

server {
    listen  443 ssl;
    server_name www.bbxinwen.com;
    ……
}

阅读 3.9k
2 个回答

对于nginx,每个listen ip:port;作为一个socket
如果一个socket没有默认配置,那会按配置文件的顺序把第一个作为默认配置,没有匹配到的域名,会在这个server {}block处理。

举个例子

server {
    listen 80;
    server_name a.com;
}
server {
    listen 80;
    server_name b.com;
}

假如80没有其他配置,那如果用 c.com, d.com, e.com 等等没有在server_name里配置的域名访问80端口,都会匹配到a.com

nginx有两个配置可以覆盖这种情况

  1. server_name _;

  2. listen port default_server;

  3. server_name 配置为 _ 表示匹配所有非匹配域名,比如上方的情况,如果加上一个配置server _;,那都会匹配到这个server block

  4. listen后面加上default_server,作用基本是一样的,不过作用域是该socket

通常1和2会同时使用。

所以,对于楼主的情况,这是正常现象
如果不想让非www.bbxinwen.com的域名不跳转到https
那应该加一个

server {
    listen 80 default_server;
    server_name _;
}

后面加上其他逻辑,比如直接返回404。

你的配置将所有http访问301到了https

return 301 https://www.bbxinwen.com$request_uri;

去掉这一行,补充和ssl配置中一样的内容即可恢复访问。
然而并不建议这么做,https本身就是为了保障访问安全,所以301过去是符合常规做法的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题