nginx--虚拟主机 server、状态模式
前戏
假设我们开发了两个网站,一个为 www.zouzou.com,一个为 www.balabala.com。如果每台服务器只能运行一个网站的话,那我们就需要买两台服务器,会造成资源的浪费。
虚拟主机就是将一台服务器分割成多个“虚拟服务器”,每个站点使用各自的磁盘空间,这样。我们就可以在一台服务器上来使用虚拟主机来部署网站。
虚拟主机就是在 web 服务里的一个独立的网站站点,这个站点对应独立的域名(IP),具有独立的程序和资源目录,可以独立的对外提供服务。这个独立的站点部署是在 nginx.conf 中使用 server { } 代码块来表示一个虚拟主机,Nginx 支持多个 server { } 标签,支持多个虚拟站点。
nginx 支持三种虚拟主机的类型
- 基于域名的虚拟主机:通过不同的域名区分不同的虚拟主机,是企业应用最广的虚拟主机。
- 基于端口的虚拟主机:通过不同的端口来区分不同的虚拟主机,一般用作企业内部网站,不对外直接提供服务的后台
- 基于 IP 的虚拟主机:通过不同的 IP 区分不同的虚拟主机,此类比较少见,一般业务需要多 IP 的常见都会在负载均衡中绑定 VIP
基于域名的虚拟主机配置
1.修改 nginx 底下的 conf/nginx.conf ,修改信息如下
server {
listen 80;
server_name www.zouzou.com;
location / {
# 指明网页根目录在 /data/zouzou 文件夹下
root /data/zouzou;
index index.html index.htm;
}
}
server {
listen 80;
server_name www.balabala.com;
location / {
# 指明网页根目录在 /data/balabala 文件夹下
root /data/balabala;
index index.html index.htm;
}
}
我将多余的数据删掉了
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; server_name www.zouzou.com; location / { root /data/zouzou; index index.html index.htm; } location /status { stub_status on; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 80; server_name www.balabala.com; location / { root /data/balabala; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
改为之后加载配置文件
nginx -t # 检测语法,在sbin下执行 nginx -s reload # 平滑重启 ,在sbin下执行
3.准备不同的虚拟主机的资料
mkdir -p /data/{zouzou,balabala}
我的目录如下。两个 index.html 文件里写了不同的内容
[root@HH balabala]# tree /data /data ├── balabala │ └── index.html └── zouzou └── index.html
4.更改本地的 hosts 文件
因为我们的两个网址 www.zouzou.com 和 www.balabala.com 是不存在的,写入到本地 dns 解析文件,由于我是在 windows 中通过浏览器访问,应该在 windows 的 hosts 文件中添加记录 hosts 文件就是一个本地 dns (就是将域名转化成 ip 地址)强制解析的文件。
windows 的 hosts 文件就在这里:C:\Windows\System32\drivers\etc\hosts ,写入如下信息
服务器的ip www.zouzou.com
服务器的ip www.balabala.com
配置好之后,浏览器就会优先使用本地的 DNS 解析。
nginx 的状态模式
nginx 与 php-fpm一样内建了一个状态页,对于想了解 nginx 的状态以及监控 nginx 非常有帮助。为了后续的 zabbix监控,我们需要先了解一下 nginx 的状态页。
Nginx 软件在编译时有一个 with-http_stub_status_module 模块,这个模块功能是记录 Nginx 的基本访问状态信息,让使用者了解 Nginx 的工作状态。
要想使用状态模块,在编译时必须增加 --with-http_stub_status_module参数。
查看是否安装了 status 模块(我在编译安装的时候已经安装了)
[root@HH ~]# /opt/nginx1-16/sbin//nginx -V nginx version: nginx/1.16.1 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) built with OpenSSL 1.0.2k-fips 26 Jan 2017 TLS SNI support enabled configure arguments: --prefix=/opt/nginx1-16/ --with-http_ssl_module --with-http_stub_status_module [root@HH ~]#
--with-http_stub_status_module 就是status模块
1.在配置文件中,添加一个参数即可
location /status {
stub_status on;
}
加载配置文件
nginx -t # 检测语法,在sbin下执行 nginx -s reload # 平滑重启 ,在sbin下执行
访问:www.zouzou.com/status 你会看到如下信息
各意义如下