侧边栏壁纸
  • 累计撰写 251 篇文章
  • 累计创建 138 个标签
  • 累计收到 16 条评论

目 录CONTENT

文章目录

nginx server_name配置

Sherlock
2017-07-19 / 0 评论 / 0 点赞 / 1102 阅读 / 3475 字 / 编辑
温馨提示:
本文最后更新于 2023-10-09,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

nginx 中的 server_name 指令主要用于配置基于名称的虚拟主机,server_name 指令在接到请求后的匹配顺序分别为:

  • 1.精确匹配
server {  
     listen       80;
     server_name  sherlocky.com  www.sherlocky.com;
     ...
}
  • 2.通配符开始匹配
server {  
     listen       80;
     server_name  *.sherlocky.com;
     ...
}
  • 3.通配符结束匹配
server {  
     listen       80;
     server_name  www.*;
     ...
}
  • 4.正则表达式匹配
server {  
     listen       80;
     server_name  ~^(?.+)\.sherlocky\.com$;
     ...
}

nginx 将按照 1, 2, 3, 4 的顺序对 server name 进行匹配,只有有一项匹配以后就会停止搜索(类似于 location 指令)。

利用 server_name 指令正则表达式的捕获功能,可以尽量精简配置文件。
such as:

  • 1.在一个 server 块中配置多个站点:
server {  
     listen       80;
     server_name  ~^(www\.)?(.+)$;
     index index.php index.html;
     root  /data/www/$2;
}

站点的主目录应该类似于这样的结构:

/data/www/sherlocky.com
/data/www/nginx.org
/data/www/google.com

这样就可以只使用一个 server 块来完成多个站点的配置。

  • 2.在一个 server 块中为一个站点配置多个二级域名

实际网站目录结构中我们通常会为站点的二级域名独立创建一个目录

server {  
     listen       80;
     server_name  ~^(.+)?\.sherlocky\.com$;
     index index.html;
     if ($host = sherlocky.com){
         rewrite ^ http://www.sherlocky.com permanent;
     }
     root  /data/www/sherlocky.com/$1/;
}

站点的目录结构应该如下:

/data/www/sherlocky.com/www/
/data/www/sherlocky
.com/nginx/

这样访问 www.sherlocky.comroot 目录为 /data/www/sherlocky.com/www/
访问nginx.sherlocky.com时为 /data/www/sherlocky.com/nginx/,以此类推。

if 语句的作用是将 sherlocky.com 重定向到 www.sherlocky.com,这样既解决了网站的主目录访问,又可以增加 seo 中对 www.sherlocky.com 的域名权重。

upstream 带下划线问题

详情可参考:用了10多年的 Tomcat 居然有bug,这能忍? ,如果地址失效可访问:400 问题(难道是tomcat的bug?)

tomcat 遵循 RFC1-1034 的规范,不允许带有下划线的Host(domain name)。
https://www.ietf.org/rfc/rfc1034.txt
可通过在 Nginx 中配置proxy_set_header HOST $host解决或者修改 upstream 为不带下划线。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区