Nginx 虚拟机核心知识
虚拟主机概念
定义:将一台物理服务器划分成多个“虚拟”服务器,每个有独立域名和目录,可独立发布网站。
实验案例:同时发布两个网站
站点1目录:
/usr/local/nginx/html/web1站点2目录:
/usr/local/nginx/html/web2
三种虚拟主机类型对比表
网页状态码
网页显示状态码
200 ok 正常访问
301 永久重定向
302 临时重定向
400 本地错误
403 没有权限
404 路径错误
500 服务端错误
502 网关错误(后端崩溃、反向代理失效、数据掉线)配置模板速记
通用结构:
server {
listen IP或端口; # 监听地址
server_name 域名; # 域名(基于域名时必填)
location / {
root html/网站目录; # 网站文件路径
index index.html; # 默认首页文件
}
}静态网站配置
server {
listen 80;
server_name example.com;
location / {
root /var/www/example;
index index.html;
}
}
# 创建测试网站
mkdir -p /var/www/example
echo "<h1>Hello Nginx</h1>" | tee /var/www/example/index.html
## 知识点
tee 是命令行工具,它的核心作用是 “双向输出”——既把内容保存到文件,同时又显示在终端屏幕上。目录列表
location /downloads/ {
root /var/www;
autoindex on; # 开启目录列表
autoindex_exact_size off; # 显示友好大小
autoindex_localtime on; # 显示本地时间
}访问控制
location /admin/ {
root /var/www;
# IP 白名单
allow 192.168.8.0/24;
deny all; # 除了上边网段以外的其余都无法访问
}默认站点与流量转发
server {
listen 80 default_server; # 默认服务器(未匹配时用)
server_name _; # 匹配所有未定义的域名
return 444; # 直接断开连接
}
# 或重定向到主站
server {
listen 80 default_server;
server_name _;
return 301 http://www.example.com$request_uri;
}IP临时添加命令(测试用):
ip addr add 192.168.8.53/24 dev ens33场景案例
# 基于IP的虚拟主机
应用场景:IP充足的环境,每个网站需要一个IP地址
## 基于IP的虚拟主机特点
- 不同IP对应不同网站
- 访问方便,用户直接使用默认端口即可访问
- 服务器需要有多个IP地址(一个公网IP大概一年的费用是600左右)
- 维护方便,基于独立IP的站点,便于监控、维护。
:演示案例
# 第一个虚拟主机 (web1)
server {
listen 192.168.8.51:80; # 监听本机 192.168.8.51 这个特定 IP 的 80 端口
location / { # 匹配所有以 / 开头的请求(即所有请求)
root html/web1; # 设置网站根目录为 Nginx 安装目录下的 html/web1
index index.html index.htm index.php; # 定义默认首页的查找顺序:先找 index.html,再找 index.htm,最后找 index.php
}
}
# 第二个虚拟主机 (web2)
server {
listen 192.168.8.52:80; # 监听本机 192.168.8.52 这个特定 IP 的 80 端口
location / { # 匹配所有请求
root html/web2; # 设置网站根目录为 Nginx 安装目录下的 html/web2
index index.html index.htm; # 定义默认首页的查找顺序:只找 index.html 或 index.htm(不支持 php)
}
}
# 基于端口的虚拟主机
应用场景:IP不足的环境
优点: 多个网站发布使用该配置方法只需要一个IP,节省IP地址
缺点: 端口你是无法告诉公网用户,无法适用于公网客户,适合内部用户
## 基于端口的虚拟主机特点
- 不同端口对应不同网站
- 访问需要加端口
- 节省IP地址
- 适合私网运行
:演示案例
# 第一个虚拟主机 (web1)
server {
listen 80; # 监听服务器的 80 端口(HTTP 默认端口)
#server_name www.zuolaoshi.cn; # 域名配置被注释掉了,意味着该 server 块将作为 80 端口的默认站点
location / { # 匹配所有以 / 开头的请求
root html/web1; # 设置网站根目录为 Nginx 安装目录下的 html/web1
index index.html index.htm index.php; # 定义默认首页的查找顺序:先找 index.html,再找 index.htm,最后找 index.php
}
}
# 第二个虚拟主机 (web2)
server {
listen 8080; # 监听服务器的 8080 端口
#server_name www.zuolaoshi.cn; # 域名配置同样被注释掉
location / { # 匹配所有请求
root html/web2; # 设置网站根目录为 Nginx 安装目录下的 html/web2
index index.html index.htm; # 定义默认首页的查找顺序:只找 index.html 或 index.htm
}
}
# 基于域名的虚拟主机
应用场景:一个网站需要有一个域名,目前公网发布网站的首选
## 基于域名的虚拟主机特点
- 不同域名对应不同网站
- 需要多个域名 可以是二级或三级域名
- 每个站点使用默认端口,方便用户访问
- 只需要一个IP地址,节约成本
- 适合公网环境
:演示案例
# 第一个虚拟主机 (web1)
server {
listen 80; # 监听服务器的 80 端口
server_name web1.zuolaoshi.com; # 绑定的域名为 web1.zuolaoshi.com
location / { # 匹配所有请求
root html/web1; # 网站根目录指向 html/web1
index index.html index.htm index.php; # 默认首页查找顺序
}
}
# 第二个虚拟主机 (web2)
server {
listen 80; # 同样监听服务器的 80 端口
server_name web2.zuolaoshi.com; # 绑定的域名为 web2.zuolaoshi.com
location / { # 匹配所有请求
root html/web2; # 网站根目录指向 html/web2
index index.html index.htm; # 默认首页查找顺序
}
}注意:每次修改完配置文件记得刷新一下
systemctl reload nginx
记忆口诀与重点提示
选型口诀:“公网首选域名型,内网省钱用端口,IP充足不差钱。”
关键区别:三种方式的核心区别在于
listen指令 中指定的资源(IP、端口)和server_name的组合。考试常见坑:
基于域名的虚拟主机,多个站点可以共用IP和端口(都是80)。
基于端口的虚拟主机,访问URL必须携带端口号。
所有配置修改后,需重载Nginx服务:
nginx -s reload。
原创
Nginx 虚拟机了解
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法