前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx系列之server虚拟主机

Nginx系列之server虚拟主机

作者头像
yxxhero
发布2022-05-31 19:15:16
3550
发布2022-05-31 19:15:16
举报
文章被收录于专栏:DevOps充电宝

Nginx系列之server虚拟主机

业务配置中,我们经常接触nginx的虚拟主机。那什么是虚拟主机呢?其实虚拟主机简单说就是在nginx开启一个个独立的网站,这些网站统一由nginx进行分发,互相隔离。今天我们就来详细说一下nginx的虚拟主机,虚拟主机分为三类:基于域名的虚拟主机、基于ip的虚拟主机、基于端口的虚拟主机三种。

1. 基于域名的虚拟主机

代码语言:javascript
复制
# nginx.conf

worker_processes auto;

error_log /var/log/nginx/error.log info;

events {
    worker_connections  1024;
}

# 简单示例
http {
    server {
        listen      80;
        server_name example.org www.example.org;
        ...
    }

    server {
        listen      80;
        server_name example.net www.example.net;
        ...
    }

    server {
        listen      80;
        server_name example.com www.example.com;
        ...
    }
}

从配置文件中可以知道,开启了三个server,也就是三个虚拟主机,他们都监听在80端口,但是server_name不一样,nginx根据请求中的Host头部,来进行请求的分发,但是如果都没有匹配或者根本就不包含Host头部,nginx会将请求路由至80端口的默认虚拟主机,在上面的配置中,默认虚拟主机是第一个server,这是默认的配置,还可以通过listen之类的default_server参数来制定默认虚拟主机。配置样例如下:

代码语言:javascript
复制
server {
    listen      80 default_server;
    server_name example.net www.example.net;
}

在实际业务,如果请求中不存在Host头部,我们可以认为这是非法请求,应该进行特殊处理,nginx同样支持该操作,配置如下:

代码语言:javascript
复制
server {
    listen      80;
    server_name "";
    return      444;
}

在上面的配置中,server_name设置为一个空字符串,它将匹配在没有Host头字段的请求,并且返回一个特殊的nginx的非标准状态码444来关闭连接。在0.8.48版本之后,server_name ""配置可省略。

2. 基于ip的虚拟主机

代码语言:javascript
复制
server {
    listen      192.168.1.1:80;
    server_name example.org www.example.org;
    ...
}

server {
    listen      192.168.1.1:80;
    server_name example.net www.example.net;
    ...
}

server {
    listen      192.168.1.2:80;
    server_name example.com www.example.com;
    ...
}

看上面的配置,定义了两个server,即两个虚拟机主机,不同点在于监听在不同的ip以及server_name,这就是基于ip的虚拟主机以及基于域名的虚拟主机的混合。在请求处理中,nginx的匹配规则如下: nginx首先根据请求中对应的ip和端口与listen指令后的ip和端口匹配,筛选虚拟主机。然后,在筛选出的虚拟主机中,通过server_name与Host请求头部进行匹配,来决定请求的路由。如果没有找到对应的虚拟机主机,请求将由默认服务器处理。

3. 基于端口的虚拟主机

代码语言:javascript
复制
server {
    listen      192.168.1.1:80;
    server_name example.org www.example.org;
    ...
}

server {
    listen      192.168.1.1:90;
    server_name example.net www.example.net;
    ...
}

其实简单的讲,基于ip和基于域名的虚拟主机是一类,因为nginx在进行请求匹配时,会将ip和端口放在一起考虑,所以两者的匹配规则是一致,在这里就不在进行赘述。

4. 虚拟主机的合理配置

在实际业务中,我们可能在一台虚拟机上面配置很多虚拟主机,如果配置在一个文件中,这将会导致文件臃肿,最好的方式是编程的思维,将虚拟主机配置在单独文件中,通过include导入到主配置文件即可。

5. 总结

nginx的虚拟主机,我们业务中最常用的功能,希望同学们好好掌握,记住nginx的虚拟主机的匹配规则,更改的把握nginx,才能更好的服务于业务。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps充电宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Nginx系列之server虚拟主机
    • 1. 基于域名的虚拟主机
      • 2. 基于ip的虚拟主机
        • 3. 基于端口的虚拟主机
          • 4. 虚拟主机的合理配置
            • 5. 总结
            相关产品与服务
            轻量应用服务器
            轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门软件打包实现一键构建应用,提供极简上云体验。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档