由于IP地址有限,因此经常存在多个主机域名对应同一个IP地址的情况,这时nginx.conf中就可以按照server_name(对应用户请求中的主机域名)并通过server块来定义虚拟主机,每个server块就是一个虚拟主机,它只处理与之相对应的主机域名请求。这样,一台服务器上的nginx就能以不同的方式处理访问不同主机域名的http请求了。


相关配置项

(1). 监听端口

语法:listen address:port [default | default_server | ...]
默认:listen 80
配置块:server

listen参数决定Nginx服务如何监听端口。在listen后可以只加IP地址、端口或主机名,例如:

listen 127.0.0.1:8000;
listen 127.0.0.1;#默认监听80端口
listen 8000;#默认是127.0.0.1
listen *:8000;
listen localhost:8000

参数:
default:将所在的server作为整个Web服务的默认server块。如果没有设置这个参数,那么将会以在nginx.conf中找到的第一个server块作为默认server块。为什么需要默认虚拟主机呢?当一个请求无法匹配配置文件中的所有主机域名时,就会选用默认的虚拟主机。
default_server:同上。
其它参数暂时不列举。

(2)主机名称

语法:server_name name [...]
默认:server_name "";
配置块:server

server_name后可以跟多个主机名称,如server_name www.testweb.com、download.testweb.com;

在开始处理一个http请求时,Nginx会取出header头中的Host,与每个server中的server_name进行匹配,以决定到底由哪一个server块来处理这个请求。有可能一个host与多个server块中的 server_name 都匹配,这时就会根据匹配优先级来选择实际处理的server块。server_name与host的匹配优先级如下:
1)首先选择所有字符串都匹配的server_name,如www.testweb.com
2)其次选择通配符在前面server_name,如*.testweb.com
3)再次选择通配符在后面的server_name,如www.textweb.*
4)最后选择使用正则表达式才匹配的server_name,如~^.testweb.com$
如果Host与所有的server_name都不匹配,这时将会按下列顺序选择处理的server块:
1)优先选择在listen配置项后加入[default | default_server]的server块
2)找到匹配listen端口的第一个server块
如果server_name后跟着空字符串(如server_name ”“;),那么表示匹配没有Host这个http头部的请求。
(3)server_names_hash_bucket_size
语法:server_names_hash_bucket_size size;
配置块:http、server、location
为了提高快速找到相应server_name的能力,Nginx使用散列表来存储server_name。server_name_hash_bucket_size设置了每个散列桶占用的内存大小。
(4)server_names_hash_max_size

    语法:server_names_hash_max_size size;默认:server_names_hash_max_size 512配置块:http、server、location

server_names_hash_max_size会影响散列表的冲突率 。server_names_hash_max_size越大,消耗的内存就越多,但散列key的冲突率则会降低,检索速度也更快。server_names_hash_max_size越小,小号的内存就越少,但散列key嘚瑟冲突率就啃增高。
(5)重定向主机名称的处理
语法:server_name_in_rediect on | off;
默认:server_name_in_redirect on;
配置块:http、server或者location
该配置需要配合server_name使用,在使用on打开时,表示在重定向请求时会使用server_name里配置的第一个主机名代替原先请求的Host头部,而使用off关闭时,表示在重定向请求时使用请求本身的Host头部。
(6)location
语法:location [=|~|~*|@] /uri/ {…}
配置块:server
location会尝试根据用户请求后中的uri来匹配上面的/uri表达式,如果可以匹配,就选择location {}块中的配置来处理用户请求。当然,匹配方式是多样的,下面介绍location匹配规则。
1)= 表示把URI作为字符串,以便与参数中的uri完全匹配。例如:

    location = / {#只有当用户请求是 / 时,才会使用location下的配置}

2)~表示匹配URI时事字母大小写敏感的。
3)~*表示匹配URI时忽略字母大小写问题。
4)^~表示匹配URI时只需要其前半部分与uri参数匹配即可。例如:

   location ^~ /images/ {#以/images/开始的请求都会匹配上...}

5)@表示仅用于Nginx服务内部请求之间的重定向,带有@的location不直接处理用户请求。
当然,在uri参数里是可以用正则表达式的,例如:

location ~* \.(gif|jpeg|jpg)$ {#匹配以.gif .jpeg .jpg 结尾的请求...
}

注意,location是有顺序的,当一个请求有可能匹配多个location时,实际上这个请求会被第一个匹配上的location处理。

nginx之虚拟主机与请求的分发相关推荐

  1. Nginx (八) --------- 虚拟主机

    目录 一.概念 二.配置虚拟主机方式 1. 基于端口的虚拟主机 2. 基于域名的虚拟主机 三.案例 一.概念 虚拟主机,就是把一台物理服务器划分成多个 "虚拟" 的服务器,这样我们 ...

  2. 正向代理和反向代理的区别Nginx配置虚拟主机流程(后续更新)

    目录 目标 安装Nginx 配置虚拟主机 准备 方法一 方法二(推荐) 验证虚拟主机 正向代理和反向代理的区别 区别&案例 正向代理和反向代理流程 目标 熟练在Linux安装单机Nginx: ...

  3. Nginx的虚拟主机配置

    Nginx的虚拟主机配置 虚拟主机 使用特殊的软硬件技术,把一台运行在因特网上的服务器主机,分成一台台虚拟的主机. 每一台虚拟主机,都可以是一个独立的网站,可以具有独立的域名,具有完整的Interne ...

  4. (3)nginx的虚拟主机配置

    1 进入nginx安装路径下的conf目录下,打开 nginx.conf,虚拟主机配置如下 Nginx配置段// 全局区 worker_processes 1; // 有1个工作的子进程,可以自行修改 ...

  5. php nginx 域名重定向,Nginx默认虚拟主机、用户认证、域名重定向

    Nginx默认虚拟主机定义默认虚拟主机配置文件,在http下面加入include vhost/*.conf 在/usr/local/nginx/conf/下创建目录 #mkdir vhost/ //创 ...

  6. Nginx配置虚拟主机三种方式

    Nginx 配置虚拟主机,总共有三种方式,基于多IP,基于多端口,基于多域名,其中基于多域名是企业中最常用的一种方式,基于多端口的方式,主要用于本机配置项目. nginx参数详解 基于多IP的方式 [ ...

  7. nginx配置虚拟主机vhost

    需求 项目需要两个域名使用同一个服务器,配置多个项目文件. 所谓虚拟主机,是说通过几个不同的url地址,都能到达nginx环境,只不过针对不同的url,处理的逻辑不同.nginx支持虚拟主机,但是浏览 ...

  8. Linux下使用Nginx完成虚拟主机配置

    虚拟主机的概念 虚拟主机,就是把一台物理服务器划分成多个"虚拟"的服务器,每一个虚拟主机都可以有独立的域名和独立的目录 nginx虚拟主机的配置 nginx的虚拟主机就是通过ngi ...

  9. 【linux】循序渐进学运维-服务篇-nginx的虚拟主机

    文章目录 前言 基于端口号的虚拟主机 1. 修改配置文件 2. 重启测试 基于ip的虚拟主机 基于域名的虚拟主机 总结 前言 前面两篇文章,我们已经探讨了nginx的安装方式,通过yum和编译来安装, ...

最新文章

  1. 7714天,王小川正式卸任搜狗CEO!用一瞬间定格永恒
  2. 遇到困难挫折也不要悲观:每个人生来就是冠军(转)
  3. Druid 执行时间分布规则
  4. scala中断循环代码示例
  5. Apache Flink 零基础入门(十九)Flink windows和Time操作
  6. android动态权限封装,Android 动态权限申请的封装
  7. hadoop元数据mysql中表字段_hive mysql元数据表说明
  8. windows 临界区
  9. 【Python】字符串反转
  10. java设计模式(2) - 结构型模式
  11. python编程可以自学么-怎么能学习好python编程?有自学的方法吗?
  12. 语音识别之--音频编解码
  13. git diff与git status
  14. 微信小程序服务端调用--小程序码 wxacode.getUnlimited 接口调用,实现微信扫码直接跳转小程序页面
  15. blender2.8 使用RetopoFlow拓扑手臂护腕 (灵活使用Contours)
  16. app同质化趋势下,如何实现差异化?
  17. UE4 指南针制作方法
  18. 【云计算】2_云服务器产品介绍
  19. RabbitMQ:Consumers的介绍和使用
  20. 富友支付AS微信支付

热门文章

  1. 仿无名云易支付首页模板
  2. ios 裁剪圆形头像_IOS_iOS如何裁剪圆形头像,本文实例为大家介绍了iOS裁剪 - phpStudy...
  3. 百度SEO站群404二次元时间倒计时页面源码
  4. 《计算机应用基础》在线考试,2018年自学考试《计算机应用基础》考试题及答案...
  5. php生成文章页,php结合smarty生成静态页面php文章内分页代码
  6. 通信工程中常用算法c语言,通信工程常见面试题.doc
  7. 某Q娱乐网emlog程序整站源码
  8. Jumpline提供的免费3月的VDS空间,空间容量为20GB, 图文介绍
  9. Web设计师须知的10项SEO技巧
  10. ASP+页缓存OutputCache Duration用法