由于想实现一个域名放置多个应用运行的目的,而不想通过域名后加端口号方式处理,这种方式处理记起来太麻烦,偷懒党简直不能忍,故而考虑了使用二级域名来处理多个应用同时运行.Google了一番资料并进行了尝试后,进行了总结.

文章开始之前先来理解一下二级域名的概念.

二级域名是指顶级域名之下的域名,在国际顶级域名下,它是指域名注册人的网上名称;在国家顶级域名下,它是表示注册企业类别的符号。我国在国际互联网络信息中心(Inter NIC) 正式注册并运行的顶级域名是CN,这也是我国的一级域名。在顶级域名之下,我国的二级域名又分为类别域名和行政区域名两类。类别域名共7个,包括用于科研机构的ac;国际通用域名com、top;用于教育机构的edu;用于政府部门的gov;用于互联网络信息中心和运行中心的net;用于非盈利组织的org。而行政区域名有34个,分别对应于我国各省、自治区和直辖市。(资料来源与百科内容)

举个"栗子"来说:

  • .com 顶级域名

    • cnblogs.com 一级域名

      • www.cnblogs.com 二级域名
      • home.cnblogs.com 二级域名
      • 依次类推...

有几点需要注意下:

  1. www.cnblogs.com是属于二级域名,不过一般我们把这个域名配置指向一级域名访问.
  2. 博客园的新闻页www.cnblogs.com/news这种形式一般称之为网站的子页面子目录等,并不是二级域名.
  3. 另外类似.com.cn,.net.cn,.org.cn这种称之为二级域.

好了,接着主题来说,我们的目的是实现访问二级域名后转发请求.
首先要实现的是二级域名的配置,一般使用Nginx泛解析来处理.
泛解析即利用通配符*来做次级域名以实现所有的次级域名均指向同一IP地址。

泛解析的用途有:
1.可以让域名支持无限的子域名(这也是泛域名解析最大的用途)。
2.防止用户错误输入导致的网站不能访问的问题。
3.可以让直接输入网址登陆网站的用户输入简洁的网址即可访问网站。

由于新政策的限制,现在通过阿里云等域名服务商已经不能直接进行Url转发请求,所以通过泛解析来实现无限二级域名是非常靠谱的实现方式.

一、配置域名解析

在你的域名提供商那里,找到设置域名解析的地方.

  1. 先配置一个泛解析地址,记录类型为A.域名指向一个IPv4地址.
  2. 主机记录设置为*.
  3. 记录值填写服务器公网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的配置文件超乎想象的灵活与强大,学习成本也蛮高的,不过熟悉它的配置后可以更加灵活的满足我们的需求.要学习的还有很多呐. :)

五、附加启用Gzip压缩页面功能

启用Gzip功能后,可以压缩Web页面后进行输出,大大减少传输数据,加快响应时间.由于比较简单就不再另起文章了,直接放这里做个备忘了.
还是http节点中增加如下配置:

    gzip on; # 开启或者关闭gzip模块
gzip_min_length 5k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 3;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;

拣几个重要的说说:

    • gzip_buffers
      设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。
      例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。
      4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。
      如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
    • gzip_comp_level
      gzip压缩比,压缩比 1 最小处理速度最快,压缩比 9 最大但处理最慢(传输快但比较消耗cpu),默认值1,根据自己需求调整.
    • gzip_min_length
      设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。
      默认值是0,不管页面多大都压缩.建议设置成大于1k的字节数,小于1k可能会越压越大.
    • gzip_types
      匹配MIME类型进行压缩,(无论是否指定)"text/html"类型总是会被压缩的。

Nginx 泛解析配置请求映射到多端口实现二级域名访问的更多相关文章

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

    由于想实现一个域名放置多个应用运行的目的,而不想通过域名后加端口号方式处理,这种方式处理记起来太麻烦,偷懒党简直不能忍,故而考虑了使用二级域名来处理多个应用同时运行.Google了一番资料并进行了尝试 ...

  2. 利用nginx泛域名解析配置二级域名和多域名

    利用nginx泛域名解析配置二级域名和多域名 网站的目录结构为 html ├── bbs └── www html为nginx的安装目录下默认的存放源代码的路径. bbs为论坛程序源代码路径 www为 ...

  3. Nginx泛解析的匹配域名绑定到子目录配置

    网站的目录结构为: # tree /home/wwwroot/linuxeye.com /home/wwwroot/linuxeye.com ├── bbs │   └── index.html └─ ...

  4. DNS泛解析配置

    多个域名走同一个nginx代理服务器,多个域名如果有相同的后缀,就可以使用泛解析了,配置如下 编辑文件:/etc/dnsmasq.conf address=/aa.com/172.16.10.10 a ...

  5. 利用nginx 虚拟主机、请求转发实现不同端口web访问

    一个服务器上挂一个网站实在是有点浪费:一个服务器上可以放多个网站:可以开启nginx的虚拟主机功能:利用访问的路径或者域名不同访问不同的文件夹:例如: 1.一台服务器上放多个网站使用nginx的配置文 ...

  6. frp 配置多个 web 项目,无需购买域名 (访问内网可视化界面,jupyter noterbook, visdom, tensorboard)

    frp 配置多个 web 项目,无需购买域名 简单配置,参考 前言: 网上也有很多教程包括官方文档,都需要购买域名,并且把 frpc.ini 中 [web]节配置的  custom_domains 的 ...

  7. Linux 学习笔记 6 搭建nginx 实现二级域名访问

    前言 在前一节的内容里面,我们学习了如何使用yum 包管理工具来安装我们需要的软件,这节内容,通过搭建Nginx 反向代理服务器,以及学习服务的配置等内容. NGINX Nginx是一款轻量级的Web ...

  8. VUE项目部署公网ip和端口以及使用域名访问配置

    前提是已经配置好了相应的外网和内网端口的映射 一.公网ip和端口配置 在vue项目启动之前对项目下:项目名/config/index.js 文件进行修改 原来的内容为:(位置在index.js的第16 ...

  9. windows+tomcat 7配置二级域名访问其他web程序

    1.在域名管理中做好二级域名的解析 2.在tomcat的server.xml中增加如下: <Host name="wx.ai77.cn" debug="0" ...

随机推荐

  1. for循环的3个参数

    1.最常用的方法是用来遍历集合 /** **第一个参数:表示循环的初始值,或初始条件,这里是i=0; **第二个参数:是循环的条件,这里是当i小于list的长度时; **第三个参数:每次循环要改变的操 ...

  2. CentOS install搭建SVN服务器

    安装步骤如下: 1.命令:yum install subversion 之后会打印很多消息,显示 Complete! 则完成. 2.查看 svn 版本:svnserve --version 3.创建S ...

  3. Dev中自带添加、编辑、删除等按钮的文字颜色等修改

    下面是ASPxGridView的自带按钮的文字等修改 <SettingsCommandButton> <NewButton Text=" " Image-Tool ...

  4. C# 实现二叉树各种排序

    1. 引言 在实际的项目中,树还是用的比较多的一种,尤其是对于具有层次结构的数据.相信很多人都学过树的遍历,比如先序遍历,后序遍历等,利用递归还是很容易理解的. 今天给大家介绍下二叉树的几种遍历算法, ...

  5. 神奇的datetime和datetime,一毫秒引发的血案

    今天才发现C#的datetime和sqlserver的daetime是多么的不一样.首先最小和最大值不一样这是众所周知的,其实精度也是一大坑. 比如 DateTime.Today.AddMillise ...

  6. 线程池ThreadPoolExecutor使用原理

    本文来源于翁舒航的博客,点击即可跳转原文观看!!!(被转载或者拷贝走的内容可能缺失图片.视频等原文的内容) 若网站将链接屏蔽,可直接拷贝原文链接到地址栏跳转观看,原文链接:https://www.cn ...

  7. MySQL的数据控制语言DCL

    我们使用DDL的"CREATE USER"语句创建用户,新的SQL用户不允许访问属于其他SQL用户的表,也不能立即创建自己的表,它必须被授权.可以授予的权限包括以下几组: 1.列权 ...

  8. 委托,匿名方法,lamda快速理解

    转载于用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树     这些对老一代的程序员都是老生常谈的东西,没什么新意,对新生代的程序员却充满着魅力.曾经新生代,好多都经过漫长的学习,理解,实 ...

  9. iReport(模版) 与Jasper(数据填充)生成pdf文档

    报表模板生成软件:iReport . 润乾.水晶. 一.Jaspersoft iReport Desiginer 5.60 的使用 1.软件jar包的下载地址与配置 百度云盘下载链接:https:// ...

  10. python__new__与__init__的区别

    __new__ __init__区别 1 class A(object): 2 def __init__(self,*args, **kwargs): 3 print "init A&quo ...