1. nginx核心功能
1.1. 虚拟主机
虚拟主机:相当于是1个网站,在ngx中通过server{}区域实现.
ngx中虚拟主机有不同的类型(配置不同)
1.1.1. 分类
虚拟主机的分类 | 说明 | 应用场景 |
基于域名的虚拟主机 | 不用域名访问不用的站点listen 80 | 生产环境最常用的(域名不同端口是80,443) |
基于端口的虚拟主机 | 不同端口访问不同的站点listen 8080 | 保护,设置特殊端口1024以上8888 18888 |
基于ip的虚拟主机 | 不同ip访问不同的站点listen 172.16.1.7:8080 | 保护,用户只能通过某个ip连接进来。用来限制网站只能通过指定的ip进行访问内网ip,vpn,ip |
1.1.2. 基于域名的虚拟主机
搭建流程:
1.准备子配置文件与检查语法
2.准备目录
3.准备代码,解压过去.
4.hosts解析与调试
不同域名访问不同的主机.
案例02: 创建conf.oldboylinux.cn网站
站点目录/app/code/conf/
书写配置文件.
1.完成后不创建站点目录进行访问看看报什么错误.
2.创建站点目录后再访问看看报什么错误.
3.创建首页文件和内容,访问看看显示什么.
1.2. 创建game.weiwei.cn网站
[root@web01 ~]# cat /etc/nginx/conf.d/game.weiwei.conf
server {
listen 8080;
server_name game.weiwei.cn;
root /app/code/game/;
location / {
index index.html;
}
}
nginx -t
systemctl reload nginx
mkdir -p /app/code/game/
unzip FC小霸王怀旧游戏机-HTML源码.zip -d /app/code/game/
hosts文件中写入:
10.0.0.7 game.weiwei.cn
命令行访问:
curl -H Host:game.wei.cn 10.0.0.7
curl -H Host:game.wei.cn 10.0.0.7:8080
curl -H Host:game.wei.cn 172.16.1.7:8080
-H修改请求头里面的内容.
1.3. nginx日志
给每个虚拟主机指定自己独立的错误日志.
给每个虚拟主机指定自己独立的访问日志.
日志 | 使用建议 | 定义 | 使用 |
错误日志 | 发生故障的时候可以查看4xx,5xx | 通过错误级别指定 | error_log |
访问日志 | 记录着用户什么时候访问网站哪些页面,客户端信息. | 通过log_format定义访问 日志的格式 | access_log |
1.3.1. 错误日志
指定错误日志的位置和错误级别(日志级别).
error_log指令 | |
格式 | error_log 文件名 错误日志级别 |
指令放在哪 | main , http , mail , stream , server , location |
错误日志级别;:左到右,越来越粗糙. 记录信息的详细程度.
debug, info, notice, warn, error, crit, alert, or emerg.
error是默认的.
notice 推荐.
debug: 未来用于调试使用,短时间开启,网站访问量较大别开.
nginx指令的帮助:nginx documentation
1.3.2. 访问日志
辅助我们进行分析,网站访问量,ip,pv.
访问日志是记录下用户信息的宝藏.
ip信息,请求方法,访问uri,文件大小,ua头,特别信息.
log_format指定访问日志的格式
log_format 格式名字 格式.....;放在哪里: http
Ngx访问日志格式(ngx 内置变量) | 说明 |
$remote_addr | 客户端ip地址 |
$remote_user | 用户名(空,ngx进行认证用户) |
$time_local | 时间 30/Aug/2022:14:44:27 +0800 |
$request | 请求报文的起始行(请求方法 URI HTTP/1.1) |
$request_method | 请求方法 GET或POST或HEAD |
$uri | 请求中的uri部分内容 |
$status | http状态码 |
$body_bytes_sent | 响应给客户的文件的大小,响应报文的主体大小(文件大小) 单位字节 bytedance |
$http_referer | (用户从哪里来的)从哪里跳转,访问到这个网站的. 网站运营分析 |
$http_user_agent | UA 客户端代理(浏览器) |
$http_x_forwarded_for | XFF头,使用负载,记录用户真实的ip地址. |
更多ngx内置变量:Alphabetical index of variables
access_log指定日志,使用对应格式:
access_log指定访问日志 | |
放在哪 | http , server , location , if in location , limit_except |
1.4. 案例06:搭建bird小鸟飞飞网站,给网站加速,设置缓存,网站中html,js,css结尾的文件缓存1天,图片缓存30天.
这里的缓存是浏览器缓存,使用 expires 指令实现
[root@web01 ~]# cat /etc/nginx/conf.d/bird.weiwei.cn.conf
server {
listen 80;
server_name bird.weiwei.cn web.bird.weiwei.cn;
error_log /var/log/nginx/bird.weiwei.cn-error.log notice;
access_log /var/log/nginx/bird.weiwei.cn-access.log main gzip buffer=64k flush=10s;
root /app/code/bird;
location / {
index index.html;
}
location ~* \.(html|css|js)$ {
expires 30d;
}
location ~* \.(png|jpeg|gif|jpg|bmp)$ {
expires 1h;
}
}
访问日志其他选项access_log(了解,未来根据需要进行配置):
access_log | 说明 |
access_log off; | 关闭访问日志一般要配合if或location实现精确匹配与处理. access_log off ; access_log /dev/null; |
访问日志进行压缩 | gzip需要通过zcat/zless/zgrep查看 |
进行缓存 | buffer = 32k 先把日志写入到内存中,定期写入到磁盘 |
定义刷新时间 | flush=10s |
2. Location规则(路由规则)
案例05: 搭建大型直播购物网站
域名:buy.oldboylinux.cn
站点目录:/app/code/buy/
用户首页文件:/app/code/buy/index.html
后台管理页面:/app/code/buy/admin/index.html
要求后台只能内网访问:172.16.1.0/24网段.
案例06:搭建bird小鸟飞飞网站,给网站加速,设置缓存,网站中html,js,css结尾的文件缓存1天,图片缓存1小时. 浏览器缓存.
案例07:部署china站点
2.1. location概述
ngx的location规则:
- 在ngx用于匹配用户请求中的uri. ngx对用户请求中的uri进行判断.
- 如果用户请求的uri是xxxx,则做xxxx.
2.2. URI vs URL
URL网址 https://nginx.org/en/docs/
URI: /en/docs/
http://www.baidu.com/lidao/lidao.avi
URI: /lidao/lidao.avi 域名后面的内容
URL: http://www.baidu.com/lidao/lidao.avi 网址
http://www.baidu.com
URI: / 域名后面的内容
URL: http://www.baidu.com 网址
2.3. location 规则
location规则 | 说明 |
location / {xxxx} | |
location规则 | 说明 |
location / {xxxx} | 默认规则,保底,location规则在进行匹配的时候,其他的规则都匹配失败了,这时候匹配默认的规则. |
location /image/ {} | 用于匹配请求的uri(路径)bird.oldboylinux.cn/image/lidao.txt ✅ |
location ~ \.(jpg|jpeg)$ {} | 支持正则,区分大小写 bird.oldboylinux.cn/lidao/lidao.jpg |
location ~* \.(jpg|jpeg)$ {} | 支持正则,不区分大小写 bird.oldboylinux.cn/lidao/lidao.jpg |
location ^~ /lidao/ | 不支持正则,仅仅匹配普通字符,很少使用,优先. |
location = /50x.html | 请求的uri与书写的内容一模一样,不支持正则,精确匹配,使用较少. |
location @名字 | 命名的location一般用于return/error_log 内部跳转. |
perl正则新的写法 :
\d === [0-9]
\w === [a-zA-Z0-9_]
location =
#用于指定 状态码与对应的页面
只要遇到500 502 503 504的状态码 就访问/50x.html页面
error_page 500 502 503 504 /50x.html;
#用于指定403.html的位置.
error_page 403 /403.html;
location = /403.html {
root /usr/share/nginx/html;
}
#用于指定403.html的位置.
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}
error_page 500 502 503 504 /50x.html;
#用于指定50x.html的位置.
location = /50x.html {
root /usr/share/nginx/html;
}
2.4. location匹配的时候优先级(演示)
优先级 | location符号 |
1 | = |
2 | ^~ |
3 | ~ ~* |
4 | /image/ |
5 | / |
[root@web01 ~]# cat /etc/nginx/conf.d/test.weiwei.cn.conf
server {
listen 80;
server_name test.weiwei.cn;
default_type text/html;
location = / {
return 200 " [ configuration A ]";
}
location / {
return 200 " [ configuration B ]";
}
location /documents/ {
return 200 " [ configuration C ]";
}
location ^~ /images/ {
return 200 " [ configuration D ]";
}
location ~* \.(gif|jpg|jpeg)$ {
return 200 " [ configuration E ]";
}
}
测试与访问 匹配结果
“/” A
“/index.html” B
“/documents/document.html” C
“/images/1.gif” D
“/documents/1.jpg” E
2.5. location案例05: 搭建大型直播购物网站
配置文件:
[root@web01 ~]# cat /etc/nginx/conf.d/buy.weiwei.cn.conf
server {
listen 80;
server_name buy.weiwei.cn;
error_log /var/log/nginx/buy.weiwei.cn-error.log notice;
access_log /var/log/nginx/buy.weiwei.cn-access.log main;
root /app/code/buy;
location / {
index index.html;
}
location /admin {
allow 172.16.1.0/24;
deny all;
}
}
#环境准备
mkdir -p /app/code/buy/admin/
echo "buy.oldboylinux.cn site" >/app/code/buy/index.html
echo "admin dangerous buy.oldboylinux.cn" >/app/code/buy/admin/index.html
#测试结果
curl -H Host:buy.oldboylinux.cn http://10.0.0.7/admin/
curl -H Host:buy.oldboylinux.cn http://172.16.1.7/admin/
2.6. 案例07 部署china代码
项目需求:
- 代码:china.tar.gz
- 站点目录:/app/code/china/
- 域名:china.oldboylinux.cn
- 如果访问.js文件,设置1天缓存,站点目录设置为/app/code/china/js
- 如果访问.css文件,设置1天缓存,站点目录设置为/app/code/china/css
[root@web01 ~]# cat /etc/nginx/conf.d/china.weiwei.cn.conf
server {
listen 80;
server_name china.weiwei.cn;
error_log /var/log/nginx/china.weiwei.cn-error.log notice;
access_log /var/log/nginx/china.weiwei.cn-access.log main;
root /app/code/china;
location / {
index index.html;
}
location ~* .js$ {
expires 1d;
root /app/code/china/js;
}
location ~* .css$ {
expires 10d;
root /app/code/china/css;
}
}
nginx -t
systemctl reload nginx
tar xf china.tar.gz -C /app/code/
hosts文件中写入:
10.0.0.7 china.weiwei.cn
show databases;
select user,host from mysql:
#创建用户
grant all on wordpress.* to 'wordpress'@'localhost' identified by 'lidao';