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

摘自:http://www.jb51.net/article/107331.htm

Nginx vhost配置,可实现基于ip、端口号、servername的虚拟主机,同时可避免直接修改主配置文件。在nginx下配置虚拟主机vhost非常方便。这篇文章主要介绍了nginx配置虚拟主机vhost的方法,需要的朋友可以参考下

前言

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

环境

系统环境:CentOS6.7

nginx version: nginx/1.8.1

方案

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

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


1

include vhosts/*.conf;

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

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

示例

下面是一个php站点的vhost:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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端口


1

2

3

4

5

server {

 listen 80;

 server_name example.org www.example.org;

 ...

}


1

2

3

4

5

server {

 listen 80;

 server_name example.net www.example.net;

 ...

}


1

2

3

4

5

server {

 listen 80;

 server_name example.com www.example.com;

 ...

}

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


1

2

3

4

5

server {

 listen 80 default_server;

 server_name example.net www.example.net;

 ...

}

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

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


1

2

3

4

5

server {

 listen 192.168.1.1:80;

 server_name example.org www.example.org;

 ...

}


1

2

3

4

5

server {

 listen 192.168.1.1:80;

 server_name example.net www.example.net;

 ...

}


1

2

3

4

5

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的虚拟主机。

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


1

2

3

4

5

server {

 listen 192.168.1.1:80;

 server_name example.org www.example.org;

 ...

}


1

2

3

4

5

server {

 listen 192.168.1.1:80 default_server;

 server_name example.net www.example.net;

 ...

}


1

2

3

4

5

server {

 listen 192.168.1.2:80 default_server;

 server_name example.com www.example.com;

 ...

}

server_name匹配顺序

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


1

2

3

4

5

server {

 listen 80;

 server_name domain.com www.domain.com;

 ...

}

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


1

2

3

4

5

server {

 listen 80;

 server_name *.domain.com;

 ...

}

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


1

2

3

4

5

server {

 listen 80;

 server_name www.*;

 ...

}

4.匹配正则表达式:


1

2

3

4

5

server {

 listen 80;

 server_name ~^(?.+)\.domain\.com$;

 ...

}

总结

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

时间: 2024-10-01 04:33:39

nginx配置虚拟主机vhost的方法详解的相关文章

LNMP架构应用实战——Nginx配置虚拟主机

LNMP架构应用实战--Nginx配置虚拟主机        前面介绍了nginx服务的安装与配置文件,今天介绍下它的另一种实用配置--"虚拟主机",每个虚拟主机可以是一个独立的网站,可以具有独立的域名,同一台服务器上的不同的虚拟主机之间是独立的,用户访问不同虚拟主机如同访问不同的服务器一样,因此它不需要为一个单独的WEB站点提供单独一个nginx服务器和一个单独的nginx进程 1.nginx虚拟主机简单介绍 同apache服务一样,它也有三种不同的虚拟主机,基于域名的虚拟主机.基于

nginx 配置虚拟主机的三种方法

nginx,一个server标签就是一个虚拟主机. 1.基于域名的虚拟主机,通过域名来区分虚拟主机--应用:外部网站 2.基于端口的虚拟主机,通过端口来区分虚拟主机--应用:公司内部网站,外部网站的管理后台 3.基于ip的虚拟主机,几乎不用. 1.基于域名配置虚拟主机配置: 需要建立/data/www /data/bbs目录,windows本地hosts添加虚拟机ip地址对应的域名解析: 对应域名网站目录下新增index.html文件: nginx.conf配置文件新增如下代码: server 

nginx配置虚拟主机之不同端口和不同IP地址

配置nginx虚拟主机不同端口和不同ip地址,和上编nginx基于域名配置虚拟主机博文类似,请先参考. zxl.com域名不同端口,配置文件内容如下: [[email protected] conf.d]# cat zxl.com.conf  server { listen 81; server_name www.zxl.com zxl.com; location / { root /data/zxl; index index.html index.htm; access_log  logs/z

nginx配置虚拟主机之基于域名

安装nginx请参考,nginx编译安装的博文 1:配置nginx虚拟主机,同一个端口80,多个不同的域名.nginx默认主配置文件内容如下 [[email protected] conf]# cat nginx.conf user  nginx; worker_processes  1; error_log  logs/error.log; pid        logs/nginx.pid; events {     worker_connections  1024; } http {   

window下phpstudy的nginx配置虚拟主机

由于很长时间没有配置Apache,虽然说知道怎么配置nginx,但是还是花费了一些时间这次记下来下次直接用 在其他选项文件菜单中->打开配置文件->选择vhosts-conf nginx的话使用 server { listen 80; server_name 你的虚拟目录名称; root "你要操作的目录路径"; location / { index index.html index.htm index.php; #autoindex on; if ($request_fi

Nginx配置虚拟主机(二)

一. 配置基于域名的虚拟主机 [[email protected] conf]# egrep -v "#|^$" nginx.conf.default > nginx.conf [[email protected] conf]# cat nginx.conf worker_processes  1; events {     worker_connections  1024; } http {     include       mime.types;     default_t

nginx配置虚拟主机-端口号区分

Nginx实现虚拟机 可以实现在同一台服务运行多个网站,而且网站之间互相不干扰.同一个服务器可能有一个ip,网站需要使用80端口.网站的域名不同. 区分不同的网站有三种方式:ip区分.端口区分.域名区分,显然通过IP区分是不太现实的,这里只验证后两种方式 1.配置nginx基于ip地址的虚拟主机 1.1 nginx配置文件中添加一个server节点,这里server节点的域名都是localhost,只是端口号不同 1.2 将 /usr/local/nginx/路径下的html目录复制一份,命名为

Nginx配置——虚拟主机基于IP,域名,端口(实战!)

Nginx虚拟主机 基于域名的虚拟主机 基于IP地址的虚拟主机 基于端口的虚拟主机 一,安装DNS域名解析服务器 1,安装bind服务器 [[email protected] ~]# yum install bind -y 2,修改主配置文件(named.conf) [[email protected] ~]# vim /etc/named.conf options { listen-on port 53 { any; }; ##监听所有 listen-on-v6 port 53 { ::1;

nginx配置+虚拟主机+负载均衡+反向代理

nginx启动+控制+配置文件 /usr/local/nginx/nginx    #启动 /usr/local/nginx/nginx -s reload    #重新加载配置文件,不需重启nginx进程 ##nginx.conf配置文件详解 nginx的配置文件相比apache,比较清晰.简单,大致分为几块: main events    {     .... } http    {     ...     upstream PROJECT_NAME    {        ##负载均衡服务