[Linux.NET]Nginx 泛解析配置请求映射到多端口实现二级域名访问
由于想实现一个域名放置多个应用运行的目的,而不想通过域名后加端口号方式处理,这种方式处理记起来太麻烦,偷懒党简直不能忍,故而考虑了使用二级域名来处理多个应用同时运行.Google了一番资料并进行了尝试后,进行了总结.
文章开始之前先来理解一下二级域名的概念.
二级域名是指顶级域名之下的域名,在国际顶级域名下,它是指域名注册人的网上名称;在国家顶级域名下,它是表示注册企业类别的符号。我国在国际互联网络信息中心(Inter NIC) 正式注册并运行的顶级域名是CN,这也是我国的一级域名。在顶级域名之下,我国的二级域名又分为类别域名和行政区域名两类。类别域名共7个,包括用于科研机构的ac;国际通用域名com、top;用于教育机构的edu;用于政府部门的gov;用于互联网络信息中心和运行中心的net;用于非盈利组织的org。而行政区域名有34个,分别对应于我国各省、自治区和直辖市。(资料来源与百科内容)
举个"栗子"来说:
- .com 顶级域名
- cnblogs.com 一级域名
- www.cnblogs.com 二级域名
- home.cnblogs.com 二级域名
- 依次类推...
- cnblogs.com 一级域名
有几点需要注意下:
- www.cnblogs.com是属于二级域名,不过一般我们把这个域名配置指向一级域名访问.
- 博客园的新闻页www.cnblogs.com/news这种形式一般称之为网站的子页面子目录等,并不是二级域名.
- 另外类似.com.cn,.net.cn,.org.cn这种称之为二级域.
好了,接着主题来说,我们的目的是实现访问二级域名后转发请求.
首先要实现的是二级域名的配置,一般使用Nginx泛解析来处理.
泛解析即利用通配符*来做次级域名以实现所有的次级域名均指向同一IP地址。
泛解析的用途有:
1.可以让域名支持无限的子域名(这也是泛域名解析最大的用途)。
2.防止用户错误输入导致的网站不能访问的问题。
3.可以让直接输入网址登陆网站的用户输入简洁的网址即可访问网站。
由于新政策的限制,现在通过阿里云等域名服务商已经不能直接进行Url转发请求,所以通过泛解析来实现无限二级域名是非常靠谱的实现方式.
一、配置域名解析
在你的域名提供商那里,找到设置域名解析的地方.
- 先配置一个泛解析地址,记录类型为A.域名指向一个IPv4地址.
- 主机记录设置为*.
- 记录值填写服务器公网Ip地址.
如图所示:
配置好后稍微等待一下,然后访问这个域名.可以随意输入任何二级域名,访问到的都应该是顶级域名的内容.我这里访问结果总是Nginx的默认页面.接着进行下一步.
二、修改Nginx配置
接着进入到系统中,我这里通过XShell连接Linux服务器.各位看官随意.能进入系统操作就行.
定位到Nginx的配置文件目录
$ cd /usr/local/nginx/conf
修改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记录,比如:
这种缺点是略繁琐,但方便管理.而且可以利用Nginx配置文件可继承的特性继续进行简化,这里就不演示了(自行脑补..).个人推荐这种用法.关于配置文件的修改到这里就差不多ok了,具体根据自己需求选择不同方式.这里列出的是比较常用的方式,当然还有其他各种酷炫写法,但这些基本够用了.
按esc,输入:wq保存文件.
三、重启Nginx
- 重启之前先来验证一下配置文件的正确性
让我们先返回到nginx的目录,定位到sbin目录中$ cd ../sbin
,接着ls
可以看到这个文件夹下只有一个绿色的名为nginx的可执行文件.这个就是我们要操作的主程序.
验证命令$ ./nginx -t
,如果输出下面内容则表示文件配置无语法错误.nginx: the configuration file .../nginx.conf syntax is ok
nginx: configuration file .../nginx.conf test is successful
- 执行重启nginx
还是上边的/sbin目录下执行$ ./nginx -s reload
如果重启成功应该是不会输出任何内容,现在在浏览器中输入二级域名访问试试吧.
四、配置二级域名总结
Nginx的配置文件超乎想象的灵活与强大,学习成本也蛮高的,不过熟悉它的配置后可以更加灵活的满足我们的需求.要学习的还有很多呐.
[Linux.NET]Nginx 泛解析配置请求映射到多端口实现二级域名访问的更多相关文章
- Nginx 泛解析配置请求映射到多端口实现二级域名访问
由于想实现一个域名放置多个应用运行的目的,而不想通过域名后加端口号方式处理,这种方式处理记起来太麻烦,偷懒党简直不能忍,故而考虑了使用二级域名来处理多个应用同时运行.Google了一番资料并进行了尝试 ...
- 利用nginx泛域名解析配置二级域名和多域名
利用nginx泛域名解析配置二级域名和多域名 网站的目录结构为 html ├── bbs └── www html为nginx的安装目录下默认的存放源代码的路径. bbs为论坛程序源代码路径 www为 ...
- Linux中Nginx安装与配置详解
转载自:http://www.linuxidc.com/Linux/2016-08/134110.htm Linux中Nginx安装与配置详解(CentOS-6.5:nginx-1.5.0). 1 N ...
- Nginx泛解析的匹配域名绑定到子目录配置
网站的目录结构为: # tree /home/wwwroot/linuxeye.com /home/wwwroot/linuxeye.com ├── bbs │ └── index.html └─ ...
- DNS泛解析配置
多个域名走同一个nginx代理服务器,多个域名如果有相同的后缀,就可以使用泛解析了,配置如下 编辑文件:/etc/dnsmasq.conf address=/aa.com/172.16.10.10 a ...
- 转 Linux下Nginx+PHP+MySQL配置
Nginx是一个高性能的HTTP和反向代理服务器,同时还是IMAP/POP3/SMTP代理服务器,该程序由俄罗斯Rambler.ru 站点开发,Nginx因为性能稳定.低系统资源消耗而闻名,近几年Ng ...
- linux下nginx部署以及配置详解
1.下载源码包解压编译 启动多个,请看:在linux系统下安装两个nginx以及启动 查看nginx包路径:http://nginx.org/download/,两种下载方式: 1.在官网下载使用Xf ...
- 怎么在linux 用nginx做代理 配置.net core
1. 安装 .net core到centos7 2. 安装nginx 配置代理: vim /opt/nginx/conf/nginx.conf server { listen 80; server_n ...
- Linux下 Nginx安装与配置(Centos7)
1:下载解压 #下载 wget http://nginx.org/download/nginx-1.14.0.tar.gz #解压 tar -xzf nginx-1.14.0.tar.gz cd ng ...
随机推荐
- 关于文件命名,你必须要知道的(浏览器报错:net::ERR_BLOCKED_BY_CLIENT)
坑爹的,今天在写完页面,用各个浏览器测试的时候,火狐.谷歌都是正常的,QQ浏览器出幺蛾子了,在使用兼容模式的时候页面正常,使用急速模式的时候部分页面正常,点击跳转到其他页面的时候就出错了,打开控制台一 ...
- js学习笔记----JavaScript中DOM扩展的那些事
什么都不说,先上总结的图~ Selectors API(选择符API) querySelector()方法 接收一个css选择符,返回与该模式匹配的第一个元素,如果没有找到匹配的元素,返回null ...
- Mysql插入中文的字段内容时乱码的解决方法
Mysql插入中文的字段内容时乱码的解决方法 1.我们在往数据库插入数据的时候,当遇到中文字符的插入时会发现插入的数据会变为?号,也就是乱码,如下所示: 2.这时候我们使用如下的查询语句可以看到相应的 ...
- mysql 开发进阶篇系列 39 mysql日志之二进制日志(binlog)
一.概述 二进制日志(binlog)记录了所有的DDL(数据定义语言)语句和DML(数据操纵语言)语句,但是不包括数据查询语句, 语句以"事件"的形式保存,它描述了数据的更改过程, ...
- C51 玄学问题,magic
0x00 问题代码 void int0_isr(void) interrupt 0 { num++; if (num%2 == 1) { uint k; for(k=0;k<3;k++) { P ...
- 从零开始学 Web 之 Vue.js(二)过滤器,按键修饰符,自定义指令
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- WinForm版图像编辑小程序(实现图像拖动、缩放、旋转、抠图)
闲暇之余,开发一个图片编辑小程序.程序主要特点就是可方便的对多个图像编辑,实现了一些基本的操作.本文主要介绍一下程序的功能.设计思路. 执行程序 下载地址: 百度网盘.https://pan.baid ...
- Docker构建Java web应用服务
1.构建一个Java应用服务,包含两个步骤:a.一个镜像从URL拉取指定的WAR文件并保存到卷里b.一个含有Tomcat服务器的镜像运行这些下载的WAR文件 2.构建下载WAR的镜像 FROM cen ...
- java远程调试(idea)
遇见一个怪异问题,无奈线上数据库有限制,只能远程调试下代码.突然发现,远程调试代码真的好简单,简单记录下操作步骤. 1.在idea里创建一个Remote,远程连接的入口. 找到 Edit Config ...
- bigdata-01-应用
1, 基本概念 在互联网技术发展到现今阶段,大量日常.工作等事务产生的数据都已经信息化,人类产生的数据量相比以前有了爆炸式的增长,以前的传统的数据处理技术已经无法胜任,需求催生技术,一套用来处理海量数 ...