nginx配置虚拟主机vhost的方法详解

前言

所谓虚拟主机,是说通过几个不同的url地址,都能到达nginx环境,只不过针对不同的url,处理的逻辑不同。
nginx支持虚拟主机,但是浏览器等客户端不知道,所以虚拟主机的几个地址,应该是都指向nginx所在的ip地址,虚拟主机功能才能正常。

环境

系统环境:CentOS6.7

nginx version: nginx/1.8.1

方案

例如配置文件位于: /opt/nginx/conf/nginx.conf

在http {}的最后,添加如下行:

include vhosts/*.conf;

即主配置文件包含/opt/nginx/conf/vhosts/ 目录下的所有*.conf 的子配置文件。[注:vhosts目录需手动创建]

添加子配置文件后,还需要通过/opt/nginx/sbin/nginx -t检查配置文件正确性

示例

下面是一个php站点的vhost:

vim www.domain.com.conf
server {
 listen 80;
 server_name www.domain.com;

 location ~ \.php$ {
 root  /opt/www;
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include fastcgi_params;
 }
 location / {
 root  /opt/www;
 index  index.php;
 }
}

高级特性

基于域名的虚拟主机

Nginx首先选定由哪一个虚拟主机来处理请求,例如如下3个虚拟主机都监听在*:80端口

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;
 ...
}

在这个配置中,nginx仅仅检查请求的“Host”头以决定该请求应由哪个虚拟主机来处理。如果Host头没有匹配任意一个虚拟主机,或者请求中根本没有包含Host头,那nginx会将请求分发到定义在此端口上的默认虚拟主机。在以上配置中,第一个被列出的虚拟主机即nginx的默认虚拟主机——这是nginx的默认行为。而且,可以显式地设置某个主机为默认虚拟主机,即在”listen”指令中设置”default_server”参数:

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

基于域名和IP混合的虚拟主机

下面这个配置里,有几个虚拟主机在不同的地址上监听:

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;
 ...
}

这个配置中,nginx首先测试请求的IP地址和端口是否匹配某个server配置块中的listen指令配置。接着nginx继续测试请求的Host头是否匹配这个server块中的某个server_name的值。如果主机名没有找到,nginx将把这个请求交给默认虚拟主机处理。例如,一个从192.168.1.1:80端口收到的访问www.example.com的请求将被监听192.168.1.1:80端口的默认虚拟主机处理,本例中就是第一个服务器,因为这个端口上没有定义名为www.example.com的虚拟主机。

默认服务器是监听端口的属性,所以不同的监听端口可以设置不同的默认服务器:

server {
 listen 192.168.1.1:80;
 server_name example.org www.example.org;
 ...
}
server {
 listen 192.168.1.1:80 default_server;
 server_name example.net www.example.net;
 ...
}
server {
 listen 192.168.1.2:80 default_server;
 server_name example.com www.example.com;
 ...
}

server_name匹配顺序

1.准确的server_name匹配,例如:

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

2.以*通配符开始的字符串:

server {
 listen 80;
 server_name *.domain.com;
 ...
}

3.以*通配符结束的字符串:

server {
 listen 80;
 server_name www.*;
 ...
}

4.匹配正则表达式:

server {
 listen 80;
 server_name ~^(?.+)\.domain\.com$;
 ...
}

总结

以上就是关于nginx虚拟主机vhost配置的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

(0)

相关推荐

  • 阿里云Linux系统Nginx配置多个域名的方法详解

    Nginx绑定多个域名,可通过把多个域名规则写一个配置文件里实现,也可通过分别建立多个域名配置文件实现,为了管理方便,建议每个域名建一个文件,有些同类域名则可写在一个总的配置文件里. 1. 比如我想建立两个站点的域名分别是www.A.com 和 www.B.com,将这两个域名都解析到同一服务器IP. 2. 在Nginx配置文件conf目录下创建一个专门存放虚拟主机配置的目录,命名为vhosts,可以把虚拟目录的配置全部放在这里.如本例创建名为vhosts_A.conf和vhosts_B.con

  • 详解阿里云LINUX服务器配置HTTPS(NGINX)

    背景说明 服务器为阿里云 ECS,操作系统为 CentOS 6.5. 部署配置说明 第一步,安装nginx 之所以要先安装 nginx,是因为下面配置域名解析的时候可以直接在浏览器看到效果,当然了,先配置域名,然后 ping 一下也是可以的 下载Nginx源码包,解压源码包,进入解压后的目录,编译配置,命令如下: ./configure --prefix=/usr/local/nginx --with-http_ssl_module 以上命令将nginx安装到usr/local/nginx目录下

  • Nginx的完整配置详解及实例代码

    Nginx的完整配置详解 最近公司新项目,由于自己是小白,跟着项目经理对Nginx进行配置,在网上找到一篇相关资料,觉得不错,并可以完成配置,这里记录下, 实例代码: #运行用户 user nobody; #启动进程,通常设置成和cpu的数量相等 worker_processes 1; #全局错误日志及PID文件 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;

  • Centos7下编译安装配置Nginx+PHP+MySql环境

    序言 这次玩次狠得.除了编译器使用yum安装,其他全部手动编译.哼~ 看似就Nginx.PHP.MySql三个东东,但是它们太尼玛依赖别人了. 没办法,想用它们就得老老实实给它们提供想要的东西. 首先的一些模块依赖一些lib库, 如果你是懒人,就顺着下面的命令分别输入就行了.然后直接看配置篇.(不过这样安装的可不是最新版本的哟) ----------------安装Nginx+PHP+MySql ---------------------- 1.1 安装或更新gcc gcc-c++ 因为我安装的

  • ubuntu 下的nginx服务器配置详解

    ubuntu 下的nginx服务器配置详解 1.nginx服务器的安装 sudo apt-get install nginx 2.nginx服务器的启动 sudo /etc/init.d/nginx start 3.多域名对应不同的后台服务器 在/etc/nginx/sites-enabled/ 目录中删除default配置文件 新建域名对应的配置文件 比如test.youlunshidai.com #通过upstream nodejs__upstream 可以配置多台nodejs节点,做负载均

  • Nginx反向代理一个80端口下配置多个微信项目详解

    Nginx反向代理一个80端口下配置多个微信项目详解 我们要接入微信公众号平台开发,需要填写服务器配置,然后依据接口文档才能实现业务逻辑.但是微信公众号接口只支持80接口(80端口).我们因业务需求需要在一个公众号域名下面,发布两个需要微信授权的项目,怎么办? 我们可以用nginx服务器做反向代理来解决这个问题.nginx服务器对外80端口,然后根据URL参数不同,对内访问不同的项目. nginx配置如下: 打开/usr/local/nginx/conf/nginx.conf worker_pr

  • Mac下Nginx安装环境配置详解

    环境信息: Mac OS X 10.11.1 Homebrew  0.9.5 正文 一.安装 Nginx 1.终端执行: brew search nginx brew install nginx 当前版本 1.6.2 安装完以后,可以在终端输出的信息里看到一些配置路径: /usr/local/etc/nginx/nginx.conf (配置文件路径) /usr/local/var/www (服务器默认路径) /usr/local/Cellar/nginx/1.6.2  (貌似是安装路径) 二.访

  • 如何在nginx中配置缓存静态文件

    这篇教程说明你应该怎样配置 nginx.设置 HTTP 头部过期时间,用 Cache-Control 中的 max-age 标记为静态文件(比如图片. CSS 和 Javascript 文件)设置一个时间,这样用户的浏览器就会缓存这些文件.这样能节省带宽,并且在访问你的网站时会显得更快些(如果用户第二次访问你的网站,将会使用浏览器缓存中的静态文件). 1.准备事项 我想你需要一个正常工作的 nginx 软件,就像这篇教程里展示的:在Ubuntu 16.04 LTS 上安装 Nginx,PHP 7

  • CentOS上搭建Nginx+Mono运行asp.net环境的配置方法

    安装步骤: 一.获取开源相关程序: 1.利用CentOS Linux系统自带的yum命令安装.升级所需的程序库: sudo -s LANG=C yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bz

  • nginx配置虚拟主机vhost的方法详解

    前言 所谓虚拟主机,是说通过几个不同的url地址,都能到达nginx环境,只不过针对不同的url,处理的逻辑不同. nginx支持虚拟主机,但是浏览器等客户端不知道,所以虚拟主机的几个地址,应该是都指向nginx所在的ip地址,虚拟主机功能才能正常. 环境 系统环境:CentOS6.7 nginx version: nginx/1.8.1 方案 例如配置文件位于: /opt/nginx/conf/nginx.conf 在http {}的最后,添加如下行: include vhosts/*.con

  • ubuntu系统下apache配置虚拟主机及反向代理详解

    前言 自己有两个域名blogsir.com.cn 和 s7star.cn ,都绑定在了我的腾讯云主机上,还有七星网络安全攻防平台的搭建,这里记录下我搭建虚拟主机和反向代理的过程,下面来一起看看详细的介绍: 配置虚拟主机 $ sudo vi /etc/apache2/sites-available/000-default.conf #DocumentRoot /var/www/html ##注释掉该行 $ cat /etc/apache2/sites-available/000-default.c

  • nginx配置多个虚拟主机vhost的方法示例

    在nginx下配置虚拟主机vhost非常方便.主要在nginx的配置文件nginx.conf中添加一个server即可 比如我想配置两个虚拟主机,通过域名linux.com和linux2.com访问,分别对应的目录是/usr/htdocs/linux 和/usr/htdocs/linux2 (这个目录下是放你开发项目文件哦) 因为我安装的本地虚拟机,所以我先在hosts文件中添加两个重定向: 192.168.20.250 linux.com //192.168.20.250是我虚拟机的ip,用的

  • nginx 配置虚拟主机,实现在一个服务器可以访问多个网站的方法

    在一台服务器上,访问不同的网站 通常有两种区分方式: 1.通过监听的端口号 2.通过域名 1.通过端口访问不同的主机: Nginx的配置文件: /usr/local/nginx/conf/nginx.conf Centos文件默认编码格式 latin1 查看编码格式的命令: :set fileencoding #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice;

  • Nginx 配置多站点vhost 的方法

    假设你想在Linux Nginx中用不同的域名访问不同的目录,这时就要配置多个vhost,具体配置如下,假设网站根目录设定在/var/www/ 1.在/var/www/下新建两个目录 /var/www/ushark.net /var/www/ushark.wang 2.编辑/etc/nginx/nginx.conf http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format mai

  • 找出nginx配置文件的所在位置的方法详解

    对于一台陌生的服务器或安装太久忘了位置,怎么才能简单快速的找到配置文件的位置呢?要找出配置文件的位置,需要先找出nginx可执行文件的路径 , 这里有几种方法: 1.如果程序在运行中 ps -ef | grep nginx # ps -ef | grep nginx root 29514... 对于一台陌生的服务器或安装太久忘了位置,怎么才能简单快速的找到配置文件的位置呢? 要找出配置文件的位置,需要先找出nginx可执行文件的路径 , 这里有几种方法: 1.如果程序在运行中 ps -ef |

  • 基于Python实现配置热加载的方法详解

    目录 背景 如何实现 使用多进程实现配置热加载 使用signal信号量来实现热加载 采用multiprocessing.Event 来实现配置热加载 结语 背景 由于最近工作需求,需要在已有项目添加一个新功能,实现配置热加载的功能.所谓的配置热加载,也就是说当服务收到配置更新消息之后,我们不用重启服务就可以使用最新的配置去执行任务. 如何实现 下面我分别采用多进程.多线程.协程的方式去实现配置热加载. 使用多进程实现配置热加载 如果我们代码实现上使用多进程, 主进程1来更新配置并发送指令,任务的

  • nginx配置虚拟主机的详细步骤

    虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台"虚拟"的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完整的Intemet服务器功能(WWW.FTP.Email等),同一台主机上的虚拟主机之间是完全独立的.从网站访问者来看,每一台虚拟主机和一台独立的主机完全一样. 利用虚拟主机,不用为每个要运行的网站提供一台单独的Nginx服务器或单独运行一组Nginx进程.虚拟主机提供了在同一台服务器.同一组Nginx进程上运行多个网站的功能. 配

  • centos7系统nginx服务器下phalcon环境搭建方法详解

    本文实例讲述了centos7系统nginx服务器下phalcon环境搭建方法.分享给大家供大家参考,具体如下: 之前我们采用的是Apache服务器,可是每秒响应只能达到2000,听说nginx可以轻易破万, 于是换成nginx试试. phalcon的官网有nginx重写规则的示例,可是却与apache的不一致,被坑了好久. 1.添加nginx源 vi /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.

随机推荐