设为首页 收藏本站
查看: 2238|回复: 0

[经验分享] [Linux.NET]Nginx 泛解析配置请求映射到多端口实现二级域名访问

[复制链接]

尚未签到

发表于 2017-12-23 22:39:02 | 显示全部楼层 |阅读模式
  修改nginx.conf文件
  

$ vi nginx.conf  

  按↓方向键把光标定位到http模块server节点.节点中listen监听了80端口,所有的请求都会交由这个节点处理.
  
需要注意的是server_name 节点,Nginx中的server_name指令主要用于配置基于名称的虚拟主机.匹配顺序不同结果不同.
  a. 精准的server_name配置,如:
  
server_name telephnik.site www.telephnik.site;
  b. 以通配符*开始的字符串:
  
server_name *.telephnik.site;
  c. 以通配符*结束的字符串:
  
server_name www.*;
  d. 配置正则表达式:
  
server_name  ~^(?.+)\.telephnik\.site$;
  匹配顺序由上至下,只要有一项匹配以后就会停止搜索.使用时要注意这个顺序.接着我们分为两种处理方式,一种是通过匹配后转发到对应网站目录下,一种是转发到对应的端口或ip.
  
转发到对应网站目录下即形如blog.telephnik.site会访问到网站目录下blog文件夹,这里存放的是blog站点的网站文件.此时配置文件这样修改:
  

listen 80;  
server_name blog.telephnik.site;
  
if ($host ~ ^(.*)\.telephnik\.site$)
  
{
  set $sub $1;
  rewrite ^(.*)$ /$sub$1 last;
  
}
  

  这里$1表示域名后的参数,last表示不再继续向下匹配.这里所有的二级域名的开头都会进入这个if条件.
  
如果我们只想控制某几个指定的域名才会匹配可以修改为:
  

if ($host ~ ^(blog|shop|about)\.telephnik\.site$)  

  当然还可以这样写:
  

server {  listen    80;
  server_name *.telephnik.site;
  if ( $host ~* (\b(?!www\b)\w+)\.\w+\.\w+ ) {
  set $sub $1;
  }
  location / {
  rewrite ^/$ /$sub$1 last;
  proxy_pass http://www.telephnik.site/;
  }
  
}
  

  这段的意思就排除www开头等url字符串,获取二级域名值赋给$sub,然后通过rewrite转到对应目录,接着设置反向代理proxy_pass值.针对服务器来说实际请求的地址为http://wwww.telephnik.site/$sub/$1.
  
这种简单实现了跳转到二级目录文件下,还有其他写法,有兴趣可以自行Google.
  
接着来说下如果要跳到对应端口或域名或ip下怎么修改.
  
一种简单实现方式是if条件判断搭配proxy_pass反向代理:
  

location / {  # 一些基本反向代理配置以及获取请求真是IP地址
  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Real-Ip $remote_addr;
  proxy_set_header X-Forwarded-For $remote_addr;
  

  # 二级域名跳转到一级域名
  if ($host = 'telephnik.site' ) {
  rewrite ^/(.*)$ http://www.telephnik.site$1 permanent;
  }
  

  # 匹配成功则转发请求到对应地址 值可以是ip也可以域名注意全名
  if ($host = 'blog.telephnik.site' ){
  proxy_pass http://127.0.0.1:8080;
  }
  # 如有其他二级域名,同上处理.
  
}
  

  这种配置方法优点是简单,缺点是域名是硬编码的字符串,如果二级域名比较多,手抖写错了,排查起来也是个麻烦事儿.所以可以利用配置多个server节点来继续优化一下:
  

# 注意这个节点和默认的server节点同级,且监听的也是80端口  
server {
  listen 80;
  server_name blog.telephnik.site;
  access_log  logs/blog-site.log;
  

  location / {
  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Real-Ip $remote_addr;
  proxy_set_header X-Forwarded-For $remote_addr;
  proxy_pass http://127.0.0.1:8080/;
  }
  
}
  

  同样监听80端口,不同的是精确匹配了server_name值然后进行了反向代理.多个二级域名同样方式配置即可.这种方式需要在域名解析中显式指明二级域名的A记录,比如:
  
DSC0000.png
  这种缺点是略繁琐,但方便管理.而且可以利用Nginx配置文件可继承的特性继续进行简化,这里就不演示了(自行脑补..).个人推荐这种用法.关于配置文件的修改到这里就差不多ok了,具体根据自己需求选择不同方式.这里列出的是比较常用的方式,当然还有其他各种酷炫写法,但这些基本够用了.
  
按esc,输入:wq保存文件.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-427351-1-1.html 上篇帖子: 系统架构之负载均衡【F5\nginx\LVS\DNS轮询\】 下篇帖子: python版本随意切换之python2.7+django1.8.7+uwsgi+nginx源码包部署。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表