Nginx系列--03HTTP段基本配置及虚拟主机

HTTP协议配置格式

http {
    ...
    ...:各server的公共配置
    server {
        ...
    }:每个server用于定义一个虚拟主机;
    server {
        ...
        server_name
        root
        alias
        location [OPERATOR] URL {
            ...
            if CONDITION {
                ...
            }
        }
    }
}

不同于HTTPD有一个默认的主机,Nginx必须使用server指令定义一个虚拟主机。

HTTP协议配置

所有的配置如果不加说明的话,都是配置在/etc/nginx/nginx.conf中

1.套接字相关配置

(1)server { ... }

  • 作用:配置一个虚拟主机
  • 示例:
    server {
    listen address[:port] | port;
        server_name SERVER_NAME;
        root /PATH/TO/DOCUMENT_ROOT;
    }

(2)listen

语法
listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE
listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]
上下文
只能放在server配置段中
解释

  • PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE:指明监听的地址和端口的方式,如果ip不指明则默认为本机所有ip,如果端口不指明则为80端口。若两则都省略则监听在本机所有ip的80端口上。
    unix:/PATH/TO/SOCKET_FILE:表明通过socket文件进行通行,那就只能用于本机通信。
  • default_server:指明默认处理请求的虚拟主机,在多个虚拟主机监听了同样的ip和port时,指明默认处理请求的虚拟主机。
  • [ssl] [http2 | spdy] :指明客户端请求资源时使用的协议。
  • [backlog=number]:监听套接字在处理请求时,如果处理不来,则将来不及处理的请求放入后援队列。backlog指明后援队列的大小。
  • [rcvbuf=size]:监听套接字接受缓冲区大小。
  • [sndbuf=size]:监听套接字发送缓冲区大小。
    配置示例
    listen 80 default_server
    listen 127.0.0.1:80 ssl backlog=512

(3)root

语法
root PATH
上下文
http、 server、 location、if in location
放置在不同的上下文中意味着生效范围的不同。
解释
指明用户访问资源时对应于主机根目录。
示例
root /var/www/vhost;
如果用户访问的URL为http://192.168.239.131/index.html ,将会获取主机上/var/www/vhost/index.html资源。也就是说URL中/index.html的/代表主机上的/var/www/vhost路径。root指明的路径如果不存在,语法检测时并不报错。如果多个上下文中有root配置,范围小的生效。

(4)server_name

指明虚拟主机的主机名称;可以指明多个,用空白字符分割
支持通配任意长度的任意字符;server_name .baidu.com www.baidu. 。基于
支持~起始的字符做正则表达式模式匹配;server_name ~^www\d+.baidu.com$
匹配机制:首先是精确匹配,再是左侧
匹配,再是右侧*匹配,最后是正则表达式。

虚拟主机配置示例

  • 基于IP的虚拟主机
    node1节点有两个IP,192.168.239.131和192.168.239.132。不同的IP监听在相同的端口上,构成基于IP的虚拟主机
    配置文件为:

    http {
    server {
        listen 192.168.239.131:80 ;
        server_name node1;
        root /var/www/vhost/131;
    }
    server {
        listen 192.168.239.132:80 ;
        server_name node1;
        root /var/www/vhost/132;
    }
    }

    ~]# mkdir /var/www/vhost/{131,132} -pv
    ~]# echo "131 virtual host" > /var/www/vhost/131/index.html
    ~]# echo "132 virtual host" > /var/www/vhost/132/index.html
    ~]# nginx -t
    ~]# nginx -r reload

  • 基于端口的虚拟主机
    不同的虚拟主机监听在相同IP地址不同端口上
    配置文件/etc/nginx/nginx.conf中http端配置
    http {
    server {
        listen 192.168.239.131:80;
        server_name node1;
        root /var/www/vhost/80;
    }
    server {
        listen 192.168.239.131:808;
        server_name node1;
        root /var/www/vhost/808;
    }
    }

  • 基于IP和PORT的混合虚拟主机
    虚拟主机监听在不同IP和不同端口上
    配置文件/etc/nginx/nginx.conf中http端配置
    http {
    server {
        listen 192.168.239.131:80;
        server_name node1;
        root /var/www/vhost/131_80;
    }
    server {
        listen 192.168.239.132:808;
        server_name node1;
        root /var/www/vhost/132_808;
    }
    }

  • 基于FQDN的虚拟主机
    虚拟主机监听在相同的IP和端口上,不同的是用于访问虚拟主机时域名的不同。Nginx会通过请求头部中的Host的值确定交由那个虚拟主机处理请求。
    配置文件配置/etc/nginx/nginx.conf
    http {
    server {
        listen 192.168.239.131:80;
        server_name vhost1;
        root /var/www/vhost/vhost1;
    }
    server {
        listen 192.168.239.131:80;
        server_name vhost2;
        root /var/www/vhost/vhost2;
    }
    }


    访问结果

2.与路径映射相关

(1)location

语法
location [ = | ~ | ~* | ^~ ] uri { ... }
解释
用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置;。在一个server中location可以有多个,并且location可以嵌套。但需要注意的是“=”进行精确匹配时嵌套,nginx -t进行语法检测时会报错。匹配URI的方式有如下几种:

=:对URI进行精确匹配;精确匹配一旦匹配到,URI匹配机制就会关闭,起到了加速匹配的作用
location = / {
...此种配置只有http://192.168.239.131/ 能够匹配到,而http://192.168.239.131/index.html 不能匹配到,不然怎么称之为精确匹配呢。
}
^~:对URI左半部分做匹配检测,不区分大小写。此匹配一旦匹配到就会终止匹配,不会进行正则表达式匹配。
~:正则表达式匹配,区分大小写。
~*:正则表达式匹配,不区分大小写。
不带符号:匹配起始于此uri的所有URI。

既然有多种匹配方式,那就一定有优先级的问题。匹配优先级为:=,^~,~/~*,不带符号;
优先级示例

location = / {
    [ configuration A ]
}

location / {
    [ configuration B ]
}

location /documents/ {
    [ configuration C ]
}

location ^~ /images/ {
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E ]
}

若我们的访问URI为“/”,将会匹配到配置A;若访问URI为“/index.html”,将会匹配到配置B;若我们访问的URI为“/document/index.html”,将匹配到配置C;若我们访问的URI为“/images/1.jpg”,将会匹配到配置D;如果访问URI为“/document/1.jpg”,将会匹配到配置E。
root和location同时配置示例
配置文件配置/etc/nginx/nginx.conf

server {
    listen 80;
        server_name node1;
    location /admin/ {
            root /var/www/vhost;
        }
}

那么请问,http://192.168.239.131/admin/ 会获取主机/var/www/vhost/index.html文件,还是/var/www/vhost/admin/index.html?

从上图结果可以看出,root指明的路径等同于“/admin/”中左“/”,所以获取主机资源路径为“/var/www/vhost/admin/index.html”。root指明的路径中右斜线可有可无,即/var/www/vhost和/var/www/vhost/都可。但需要注意的是location中/admin/和/admin是不同的。我们可以看如下示例:

http {
    server {
            listen 80;
          server_name node1;
          location /admin {
              root /var/www/vhost/;
          }
    }
}


从上图我们可以看到,用户访问URI为/admin,服务器返回一个301临时重定向,重定向的URI为/admin/,然后浏览器会再次发起请求,请求的URI为/admin/。在反向代理情景中我们可能不需要此功能,那么我们可以使用精确匹配

http {
    server {
            listen 80;
          server_name node1;
          location = /admin {
              root /var/www/vhost/;
          }
    }
}

(2)alias

语法
alias path;
解释
定义路径别名,将制定的location替换成alias制定的路径。只能放在location中,不能与root指令同用。
示例

http {
    server {
        listen 80;
          server_name node1;
        location /admin/ {
              alias /alias/;
        }
    }
}


可以看到alias指明的路径是相对于根文件系统的。
还需注意的是location中的路径和alias的路径右斜线要同时存在或不存在,否者资源会访问不到。例如:

location /admin {
    alias /alias/;
}
或
location /admin/ {
    alias /alias;
}
都是错误的,不可取

(3)index

用法
index file ...;
解释
用于指定默认访问资源,可用在http,server,location中。当用于访问的资源对应的路径是目录时,默认访问此目录的文件
示例

http {
    server {
                    listen 80;
                    server_name node1;
                    location / {
                            root /var/www/vhost/;
                            index a.html;
                    }
    }
}

(4)error_page

语法
error_page code ... [=[response]] uri;
解释
对于特定的错误返回一个指定的uri。code对应特定的错误。=response,指明返回给用户时的状态码。
示例1
我们将404错误定向百度页面

http {
    server {
        listen 80;
        server_name node1;
          location / {
              root /var/www/vhost/;
              error_page 404 http://www.baidu.com;
      }
    }
}


示例2
在正常线上环境,我们都会有对应的错误页面返回,并不会上上面那样重定向到百度页面。而在线上环境我们的配置往往是这样

http {
    server {
            listen *:80;
                server_name node1;
                locastion / {
                    root /var/www/vhost/;
                        error_page 404 /404.html
                }

                location /404.html {
                    root /etc/nginx/error_pages/;
                        index 404.html;
                }
        }
}


访问一个不存在的页。

示例3--返回一个指定的响应码

http {
    server {
            listen *:80;
                server_name node1;
                locastion / {
                    root /var/www/vhost/;
                        error_page 404 =200 /404.html
                }

                location /404.html {
                    root /etc/nginx/error_pages/;
                        index 404.html;
                }
        }
}

注意:示例1和示例2,3是不同,示例1是做了重定向,而示例2,3是nginx内部重新做了路径映射。所以示例一种使用=reponse是达不到指定响应码的效果。

参考

https://nginx.org/en/docs/http/ngx_http_core_module.html

原文地址:http://blog.51cto.com/13589448/2089223

时间: 2024-10-09 03:23:12

Nginx系列--03HTTP段基本配置及虚拟主机的相关文章

配置LANMP环境(7)-- 配置nginx反向代理,与配置apache虚拟主机

一.配置nginx反向代理 1.修改配置文件 vim /etc/nginx/nginx.conf 在35行http下添加一下内容: include /data/nginx/vhosts/*.conf; include /etc/nginx/upstream.conf; 2.在/etc/nginx/目录下新建 upstream.conf文件 vim upstream.conf upstream dev.test1.com { server 127.0.0.1(换成虚拟机ip):8080 weigh

12.Nginx介绍,安装,配置默认虚拟主机,重定向

[toc] 12.5 Nginx介绍 官网:nginx.org 因为nginx处理静态文件的能力要比apache好很多,所以很多企业在建站的时候一般都是用java写的,然后会选择tomcat,但是tomcat处理静态文件的能力不是太好就会叠加选择nginx. nginx特点: 体积小 处理能力强 并发高 可扩展性好 Nginx应用场景: web服务 反向代理 负载均衡 Nginx著名分支,淘宝基于Nginx开发的Tengine,使用上和Nginx一致,服务名,配置文件名都一样,和Nginx的最大

3、Nginx关于server段的配置

前面第2篇文章中列出了全局段.events段.http段的一些指令的意义和用法,这篇文章将介绍server段的相关指令. listen: listen指令有三种配置方法: 1.listen address[:port] [ default_server ]  [ ssl ]; 2.listen port [ default_server ]  [ ssl ]; 3.listen unix:path [ default_server ]  [ ssl ]; 使用示例: listen *:80 |

Nginx的基本配置:虚拟主机、日志文件、缓存、自动列目录的配置

Nginx配置文件总览 Nginx的配置文件结构 #设置用户 user root; #工作衍生的进程数 (一般=CPU核心数或核心数*2) worker_processes 2; #设置错误文件的存放路径 error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #设置pid的存放路径(pid是控制系统中的重要文件) pid logs/nginx.pid; #设置最大连接

nginx学习笔记之基于端口的虚拟主机基于主机名的虚拟主机root、alias、index配置

nginx学习笔记之基于端口的虚拟主机基于主机名的虚拟主机root.alias.index配置 实验环境: centos 测试节点IP:172.16.3.101 基于端口的虚拟主机: vim /etc/nginx/nginx.conf # 向里面的http {}里面加入如下内容   server { # server定义一个虚拟主机         listen 8080; # 监听本机所有IP端口8080         server_name www.test.com; # 虚拟主机名为:w

Nginx提供网站服务应用包括(虚拟主机、用户访问控制、用户验证、nginx平滑升级、防盗链)的配置

Nginx   开源且跨平台的软件    俄罗斯人开发的   提供网站服务  和  代理服务 Nginx 提供网站服务应用环境? 1.虚拟主机2.用户访问控制3.用户验证4.防盗链 实验环境: 安装软件:nginx-0.855.tar.gz 操作系统:centos6.5 实验:(一) 实验目的:nginx源码包的安装以及基本的使用. 安装源码包要安装的工具:开发工具 和开发环境 1.安装nginx源码包 建立ngix软件夹用来存放nginx软件包 添加一个进程的所有者和所属组为www,www为n

nginx生产环境常用功能include 、虚拟主机别名、rewrite、nginx status详细解析

一.配置文件优化之include参数 如果我们用nginx搭建虚拟主机,虚拟主机太多,我们不能把所有配置放置在nginx.conf中吧?那样这个配置文件就太大了,看起来很乱,所有这时就产生了 include参数: 大家如果了解apache软件,就会知道apache主配置包含虚拟主机子文件的方法,其实nginx也借鉴了apache的这种包含方法 nginx的主配置文件为nginx.conf,主配置文件所包含的所有虚拟主机的子配置文件会统一放入extra(这个名字随便起的)目录中,虚拟主机的配置文件

16.4 配置Tomcat监听80端口 16.5/16.6/16.7 配置Tomcat虚拟主机 16.8 Tomcat日志

16.4 配置Tomcat监听80端口 16.5/16.6/16.7 配置Tomcat虚拟主机 16.8 Tomcat日志 扩展 邱李的tomcat文档 https://www.linuser.com/forum.php?mod=forumdisplay&fid=37 JAR.WAR包区别 http://blog.csdn.net/lishehe/article/details/41607725 tomcat常见配置汇总 http://blog.sina.com.cn/s/blog_4ab26b

WIN10 vagrant和virtualbox虚拟机和一键搭建lnmp环境配置thinkphp虚拟主机

版本:win10系统 virtualbox:5.1.26 vagrant :1.9.7 centos 7.0 xshell/git 首先下载好对应版本的软件 配置vagrant和virtualbox 一.把虚拟机加载到box容器中 vagrant box add CentOs7.0 D:\soft\Vagrantfile\package.box CentOs7.0 是给虚拟机起的名字 D:\soft\Vagrantfile\package.box 是box路径也就是centos7.0 二.找一个