当前位置: 首页 > news >正文

nginx学习

nginx命令行

1.nginx启停的指令   ,-s参数 ,指定是给nginx进程发送某种信号

nginx  #初次启动,直接输入nginx,如启动后再次执行该命令,就会提示端口冲突(停止nginx,再启动)

nginx -s stop  #停止nginx进程

nginx -s reload  #平滑重启,利用reload可以再不重启nginx进程的情况下,重新读取配置文件

2. 查看nginx命令的帮助信息

[root@iZ2vce9vkv6wgvss1g3b0nZ ~]# nginx -h
Tengine version: Tengine/2.3.2
nginx version: nginx/1.17.3
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]Options:-?,-h         : this help    #输出nginx的帮助信息-v            : show version and exit    #列出nginx的版本号-V            : show version and configure options then exit    #列出nginx版本和编译参数信息-t            : test configuration and exit    #检查nginx的配置文件,语法是否正确-T            : test configuration, dump it and exit    #同时检查配置,然后输出配置信息-q            : suppress non-error messages during configuration testing    #再检测配置文件期间屏蔽非错误信息
#-s给nginx主进程发送一个主信号,分别有stop停止运行,quit优雅停止,reload重读配置文件,reopen重新记录nginx日志 -s signal     : send signal to a master process: stop, quit, reopen, reload-p prefix     : set prefix path (default: /opt/tngx232/)    #设置nginx目录前缀
#nginx -c /opt/mynginx.conf    指定配置文件启动-c filename   : set configuration file (default: conf/nginx.conf)-g directives : set global directives out of configuration file    #覆盖设置一些默认参数-m            : show all modules and exit    #列出nginx所有支持的模块-l            : show all directives and exit    

nginx命令行案例

1.检查当前nginx进程

ps -ef | grep nginx

2.修改nginx.conf   修改配置参数  

3.重新加载nginx配置

nginx-master信号传递

1. master主进程是不处理请求的,而是分配请求发给worker进程,主进程负责重启、热加载、热部署等等
2. master是根据nginx.conf中 worker_process定义启动时创建的工作进程数
3. 当worker运行后,master就处于一个等待的状态,等待用户的请求来临,或者系统信号
4. 系统管理员可以发送kill指令,或者nginx -s 信号,这样的形式操控nginx

nginx信号集

nginx -s 对应的信号功能如下

参数            信号            含义
stop             TERM        强制关闭nginx服务
null              INT             强制关闭整个nginx服务
quit              QUIT          优雅的关闭整个服务
reopen         USR1        重新打开日志记录
reload          HUP          重新读取配置文件,并且优雅的退出旧的worker

nginx热部署功能

nginx作为一个优秀的web服务器,优秀的反向代理服务器,并且nginx也支持高可用的特性,nginx还支持热部署的特点。

热部署的特点:在不重启或者关闭进程的情况下,新的应用直接替换旧的应用。

更换nginx的二进制命令版本 热部署大致流程

1.备份旧的程序二进制文件,备份nginx命令,/opt/tngx232/sbin/nginx

2.编译安装新的二进制文件,覆盖旧的二进制文件,(再装一个版本的nginx,且替换旧的nginx命令)

3.发送USR2信号发给旧的master进程

4.发送WINCH信号给旧的master进程

5.发送QUIT信号给旧的master进程

环境准备

1.准备旧的nginx程序版本

[root@iZ2vce9vkv6wgvss1g3b0nZ ~]# nginx -v
Tengine version: Tengine/2.3.2
nginx version: nginx/1.17.3

2.准备一个新的nginx程序版本   2.2.0

wget https://tengine.taobao.org/download/tengine-2.2.0.tar.gz

nginx热部署操作

nginx工作模式是master-worker(包工头----干活工人)

刚才所讲的nginx支持reload重载,仅仅是nginx的master进程,在检查配置文件正确之后,正则则更新,错误则返回异常,正确的情况下也不会更改已经建立的worker,只会等待worker处理完毕请求之后,杀死旧的worker,然后再从新的配置文件中,运行处新的worker(一旦更换了配置文件,reload master主进程,那么手底下的工人也就会被换一批了) nginx还提供了热部署功能,特点是:在不影响用户体验下,进行软件版本升级,也就是不主动的杀死worker,就能够更换软件的二进制命令

1.检查当前机器环境的nginx版本

2.备份旧的二进制命令

[root@iZ2vce9vkv6wgvss1g3b0nZ ~]# cd /opt/tngx232/sbin/
[root@iZ2vce9vkv6wgvss1g3b0nZ sbin]# ls
nginx
[root@iZ2vce9vkv6wgvss1g3b0nZ sbin]# mv nginx nginx.232
[root@iZ2vce9vkv6wgvss1g3b0nZ sbin]# ls
nginx.232

3.检查旧的二进制命令的编译参数  

4.下载编译安装新的版本的nginx

wget https://tengine.taobao.org/download/tengine-2.2.0.tar.gz
tar -zxvf tengine-2.2.0.tar.gz

进行编译安装

cd tengine-2.2.0

#新版本的nginx编译参数和旧的保持一致

./configure --prefix=/opt/tngx232 --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-threads --with-file-aio

#编译三部曲,后两步

make && make install

5.检查新版的nginx信息,发现此时已有2个版本的nginx命令

 6.再次检查当前系统的nginx状态

#通过        pid        ppid可以验证,worker process是由master process创建的

[root@iZ2vce9vkv6wgvss1g3b0nZ sbin]# ps -ef |grep nginx
root     20203     1  0 Jun08 ?        00:00:00 nginx: master process /opt/tngx232//sbin/nginx
nobody   20671 20203  0 Jun08 ?        00:00:00 nginx: worker process
nobody   20672 20203  0 Jun08 ?        00:00:00 nginx: worker process
nobody   20673 20203  0 Jun08 ?        00:00:00 nginx: worker process
root     28342 24974  0 10:54 pts/0    00:00:00 grep --color=auto nginx

7.此时发送一个USER2信号给旧的master process,作用是使得nginx旧的版本停止接收用户请求,并且切换为新的nginx版本  

#执行如下命令,给旧的nginx发送信号

kill -USR2 `cat /opt/tngx232/logs/nginx.pid`

当执行完上述的命令,nginx-master旧的,首先会重命名它的pid文件,然后添加上.oldbin后缀

然后会再启动一个新的master主进程,以及worker,使用的是新版本的nginx二进制命令

此时新的nginx就能够自动接收用户发来的请求,过度到新的nginx-worker工作进程上,

因此实现了一个平滑过渡

8.此时再次检查新的nginx进程状态再检查一下,新的pid文件信息

9.此时发送WINCH信号,给旧的master进程,让旧的master进程优雅的退出

kill -WINCH `cat /opt/tngx232/logs/nginx.pid.oldbin`

10.此时如果你觉得nginx服务一切正常,就可以干掉旧的master主进程了

[root@iZ2vce9vkv6wgvss1g3b0nZ logs]# kill 20203
[root@iZ2vce9vkv6wgvss1g3b0nZ logs]# ps -ef | grep nginx
root     28351     1  0 11:00 ?        00:00:00 nginx: master process /opt/tngx232//sbin/nginx
nobody   28352 28351  0 11:00 ?        00:00:00 nginx: worker process
nobody   28353 28351  0 11:00 ?        00:00:00 nginx: worker process
nobody   28354 28351  0 11:00 ?        00:00:00 nginx: worker process
root     28413 24974  0 11:44 pts/0    00:00:00 grep --color=auto nginx

11.此时nginx版本热部署,热更换实验就结束了

nginx日志切割

日志切割时很常见的操作,能够控制单个日志文件的大小,便于对日志进行管理

[root@iZ2vce9vkv6wgvss1g3b0nZ logs]# cd /opt/tngx232/logs/
[root@iZ2vce9vkv6wgvss1g3b0nZ logs]# ls
access.log  error.log  nginx.pid
[root@iZ2vce9vkv6wgvss1g3b0nZ logs]# du -h ./*
52K	./access.log
32K	./error.log
4.0K	./nginx.pid

实时显示日志情况   tail  -f  日志名

tail -f access.log

#############################################################################

ab -kc 10 -n 10 http://127.0.0.1/

1.针对nginx的访客日志进行切割

[root@iZ2vce9vkv6wgvss1g3b0nZ ~]# cd /opt/tngx232/logs/
[root@iZ2vce9vkv6wgvss1g3b0nZ logs]# ll -h
total 112K
-rw-r--r-- 1 root root 63K Jun  9 20:08 access.log
-rw-r--r-- 1 root root 36K Jun  9 18:57 error.log
-rw-r--r-- 1 root root   6 Jun  9 11:00 nginx.pid

2.给当前日志文件重命名,注意使用mv命令

mv access.log "access.log_$(date +"%Y-%m-%d")" 

 3.发送星号给nginx主进程,给他发送一个重新打开的信号,让nginx生成新的日志文件

nginx -s reopen   #这个命令等同于   kill -USR1 `cat nginx.pid` 

 4.注意在以上的nginx重命名日志切割链,不要着急立即对文件修改,而是要注意等待几秒钟,因为nginx的工作模式特点,master下发指令给worker去干活,刚发指令的时候只是一个标记,当业务量很大的时候,这个修改操作可能会有点慢,不会立即生效

5.在生产环境下,日志切割主要是以定时任务的形式来操作

编写一个定时日志切割的脚本

vim cut_nginx_log.sh  #写入如下内容
#!/bin/bash
# 脚本写入crontab,每天0点执行,这是一个nginx日志切割脚本#nginx日志存放点
logs_path="/opt/tngx232/logs/"
mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")
mv ${logs_path}access.log $(logs_path)$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y-%m-%d").log
# 也能换成 nginx -s reopen
kill -USR1 `cat /opt/tngx232/logs/nginx.pid`

6.把该脚本的执行,加入crontab  每天0点执行

crontab -e  #打开定时任务
* * * * *   命令  
0 0 * * * /bin/bash /cut_nginx_log.sh

nginx虚拟主机

虚拟主机指的就是一个独立的站点配置,是nginx默认支持的一个功能,它能够有自己独立的域名,独立的ip,独立的端口配置,能够配置完整的www服务,例如网站搭建,ftp服务搭建,邮件服务器代理等等。

并且nginx支持多虚拟主机,可以在一台机器上,同时运行多个网站的功能。

nginx的多虚拟主机,可以基于

- 多域名的形式

- 多ip的形式

- 多端口的形式

利用虚拟主机的功能,就不用为了运行一个网站,而单独的配置一个nginx服务器,或者单独的再运行一组nginx进程。

利用nginx的多虚拟主机配置,我们就可以基于一台服务器,一个nginx进程,实现多个站点的配置

nginx单虚拟机的配置

nginx静态网站的搭建

修改nginx虚拟主机站点目录

1.修改nginx默认站点配置,nginx.conf 修改server{}标签内容

location / {# root关键词 是定义网页根目录的,这个html是以nginx安装的路径为相对root /www/html;# index关键词,定义nginx的首页文件名字,默认找那个文件index index.html index.htm; 
}

2.创建新的网页站点资料

3.改了配置文件,一定要重新加载nginx,读取配置

nginx静态资源压缩

nginx支持gzip压缩功能,经过gzip压缩之后的页面,图片,动态图这类的静态文件,能够压缩为原本的30%甚至更小,用户访问网站的体验会好很多

1.首先准备好nginx服务器,以及配置好虚拟主机站点,再准备好一些静态数据 

echo 阿瑞{1..199999} >> a1.txt

2.此时在没有开启gzip压缩的情况下,访问该txt文本,发现加载速度很慢

3.开启nginx的gzip压缩功能,只需要在http{}配置中,打开如下参数即可

gzip on; 
gzip_http_version 1.1; 
gzip_comp_level 4; 
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;

nginx基于IP的多虚拟主机 

环境准备

准备号linux机器,以及配置号3个IP地址

#给网路设备添加别名,绑定多个IP
ifconfig eth0:1 172.29.180.54 netmask 255.255.240.0  broadcast 172.29.191.255
ifconfig eth0:2 172.29.180.53 netmask 255.255.240.0  broadcast 172.29.191.255

准备好的IP地址信息如下 

[root@iZ2vce9vkv6wgvss1g3b0nZ html]# ifconfig |grep "inet 172"inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255inet 172.29.180.55  netmask 255.255.240.0  broadcast 172.29.191.255inet 172.29.180.54  netmask 255.255.240.0  broadcast 172.29.191.255inet 172.29.180.53  netmask 255.255.240.0  broadcast 172.29.191.255

 添加nginx的配置,添加多个server{}标签,让nginx支持基于IP的多虚拟主机,返回多个站点内容 

1. 给nginx添加include包含语法,让其他目录下的配置文件参数,导入到nginx.conf中,这样的写法,能够让nginx每一个配置文件,看起来更简洁,更清晰

修改nginx.conf ,在http{}标签中的最后一行,添加如下参数,extra文件夹和nginx.conf文件夹为相对

include extra/*.conf;

2. 在extra目录下,添加多个基于ip的虚拟主机配置 可以像如下规则的形式,来编写nginx.conf配置文件 第一个基于ip的虚拟主机,写在conf/nginx.conf 部分代码如下,当172.29.180.55请求到来,让nginx去/www/55文件夹下寻找资料

listen 172.29.180.55:80; 
server_name localhost; 
location / {root /www/55;index index.html index.htm; 
}

3. 在添加172.29.180.54虚拟主机的配置

vim extra/54.conf ,添加如下代码

server { 
listen 172.29.180.54:80;
server_name _; 
location / {root /www/54; index index.html; } 
}

4.编辑53.conf,添加如下代码

server { 
listen 172.29.180.53:80;
server_name _; 
location / {root /www/53; index index.html; } 
}

5.检查nginx语法是否正确

nginx -t

6.重加载nginx配置,改了较多的nginx配置,在允许重启nginx的情况下

nginx -s stop

#防止出现nginx缓存的情况,发现页面无变化

nginx -s reload

7.准备3个基于IP的站点内容

mkdir -p /www/{55,54,53}echo "i'm 55,hello man" > /www/55/index.html
echo "i'm 54,hello man" > /www/54/index.html
echo "i'm 53,hello man" > /www/53/index.html

8.先在linux本地测试多IP的虚拟主机

9.使用客户端的浏览器查看效果

nginx基于多域名的虚拟主机配置

基于多 IP 的虚拟主机,用的还是不多的,还可能造成 IP 不足等问题,一般如果没有特殊需求,用的更多,且更方便的是基于多域名的虚拟主机

前提使用条件,要么配置 DNS 服务器,将你想用的域名解析到对应的 ip
使用本地的 hosts 文件,进行本地测试访问
多域名的配置结合 nginx,就是先了多虚拟主机的访问,解决了可能 IP 不足的问题

1. 环境准备 ,先在你的客户端本地,修改 hosts 文件信息

macos /etc/hosts 文件里面该
windows c 盘里面的 hosts 文件,搜索引擎搜一下即可知道

2. 修改 hosts 文件,添加如下信息,注意这里是客户端本地添加的域名

***.***.***.***         learn.nginx.com
***.***.***.***         learn.nginx.cc.com
***.***.***.***         learn_nginx.yy.com

3. 修改服务端的 nginx 配置

第一个域名主机的虚拟主机

server {listen       80;server_name  learn_nginx.com;location / {root   /www/learn_nginx;index  index.html index.htm;}
}

第二个域名主机的虚拟主机

server {listen       80;server_name  learn_nginx_cc.com;location / {root   /www/learn_nginx;index  index.html;}
}

第三个域名主机的虚拟主机

server {listen       80;server_name  learn_nginx_yy.com;location / {root   /www/learn_nginx;index  index.html;}
}

4.语法检测,进行nginx重启

nginx -tnginx -s reload

5.分别准备3个域名的虚拟主机站点资料

mkdir -p /www/{learn_nginx,learn_nginx_cc,learn_nginx_yy}

6.生成三点虚拟主机站点的首页内容

echo "i'm aruiya,learn_nginx,welcome---" > /www/learn_nginx/index.html
echo "i'm aruiya,learn_nginx_cc,welcome---cccc" > /www/learn_nginx_cc4/index.html
echo "i'm aruiya,learn_nginx_yy,welcome---yyyy" > /www/learn_nginx_yy/index.html

7.通过客户端浏览器,分别访问3个域名 ,查看站点内容

nginx支持基于多端口的虚拟主机配置

只需要修改 nginx.conf 中
server {} 标签里面定义的
listen 端口 参数即可,实现不同的端口,进行的虚拟主机匹配

172.29.180.55:80
172.29.180.55:85
172.29.180.55:90

基于不同的端口,来定义为不同的 server 虚拟主机的配置 --

nginx多虚拟主机日志定义

不同的 ip
不同的端口
不同的域名

都能够访问到一台计算机的配置,nginx 的多虚拟主机的功能配置,利用虚拟主机可以在一台服务器上,运行多个站点配置。

针对每一个虚拟主机都配置好 access.log 更方便更清晰的对每一个虚拟主机进行访客信息管理

针对虚拟主机,添加日志的路径

server {
listen 80;
server_name learn_nginx_cc.com;access_log logs/learn_nginx_cc.log;location / {
root /www/learn_nginx_cc;
index index.html;
}​

#第二个虚拟主机的配置

server {
listen 80;
server_name learn_nginx_yy.com;access_log logs/learn_nginx_yy.log;location / {
root /www/learn_nginx_yy;
index index.html;
}​

#检测 nginx 语法

nginx -t
nginx -s reload #重新读取配置文件

此时就生成了针对

[root@rsync01 logs]# ls -l
总用量 18352
drwxr-xr-x 3 root root 16 4 月 22 10:18 2020
-rw-r--r-- 1 root root 30829 4 月 27 16:07 access.log
-rw-r--r-- 1 root root 1829171 4 月 22 09:50 access.log.2020-04-22
-rw-r--r-- 1 root root 4425 5 月 6 14:33 cc.access.log
-rw-r--r-- 1 root root 452116 5 月 6 14:38 error.log
-rw-r--r-- 1 root root 0 5 月 6 14:37 lear_nginx_yy.log
-rw-r--r-- 1 root root 0 5 月 6 14:37 learn_nginx_cc.log

nginx访客日志

日志对于程序员是很重要的,可以用于问题排错,记录程序运行时的状态,一个好的日志配置,能够给与运维人员,开发人员精准的问题定位功能。

Nginx 开启日志功能只需要在 nginx.conf 里面找到 log_format 参数,定义日志的格式,以及定义日志的存储位置,以及日志的格式,路径,缓存大小等等。

可以定义在全局配置中

nginx.conf 配置日志功能的代码如下,修改为如下即可

#nginx web 功能的核心配置点http {
include mime.types;
default_type application/octet-stream;
#定义日志内容格式(记录内容的详细程度)
log_format main '$remote_addr - time_local] "status body_bytes_sent"http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;
#access_log "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G" main;……}

$remote_addr 记录访客的客户端ip地址
$remote_user 记录远程客户端的访客用户名
$time_local 记录访问的时间和地区信息
$request 记录用户的 http 请求的首行信息
$status 记录用户的http请求状态,也就是请求发出之后,响应的状态,如200 301 404 502
$body_bytes_sent 记录服务器发给客户端的响应体数据字节大小
$http_referer 记录本次请求是从哪个链接过来的,可以个根据refer信息来进行防盗链信息
$http_user_agent 记录客户端的访问信息,如浏览器信息,手机浏览器信息
"$http_x_forwarded_for" 捉到藏在代理服务器后面的真实客户端 ip 信息 

nginx目录浏览功能

能够将你的机器上的目录资料,提供一个展示,无论是谁都可以快速的访问

1.修改 nginx.conf 配置,这个功能是在虚拟主机里定义的

​server {
listen 80;
server_name learn_nginx_cc.com;
access_log logs/learn_nginx_cc.log;
#让nginx虚拟主机支持中文解析
charset utf-8;
#域名匹配,所有的请求都会进入如下的目录解析
location / {
root /www/learn_nginx_cc;
#关闭虚拟主机的默认首页功能
#index index.html;
#自动的展示root所定义的目录下所有文件内容
autoindex on;
}
}
​

2.还得检查虚拟主机目录下,不要存在index.html文件

nginx状态信息功能

nginx 提供了 status 模块,用于检测 nginx 的请求连接信息
,这个功能需要在编译安装 nginx 的时候,添加 --with-http-stud-status_module 参数,才能使用

nginx -V #检查当前 nginx 是否支持 status 功能

当你支持status功能,我们可以添加一个conf配置文件,用于检查状态页的功能

#创建一个status.conf,放入extra目录下

1.确保你的nginx.conf主配置文件,支持include语法

include extra/*.conf;  #将当前的extra目录下所有的conf文件,都识别为是nginx的配置文件

2.创建status.conf

touch /opt/tngx232/conf/extra/status.conf

3.修改status.conf  开启状态页面功能,添加如下代码 

server {listen 172.29.180.55:80;location / {stub_status on; #开启状态页功能access_log off; #关闭访客日志功能}
}

4.检查nginx配置,重启nginx

nginx -t
nginx -s reload
Active connections: 2  #显示正在处理的活动的连接数
server accepts handled requests request_time7 7 23 0
Reading: 0 Writing: 1 Waiting: 1 

访问nginx状态页

server:nginx 启动后一共处理的请求数​

accepts handled:nginx 启动后创建的握手数​

requests:nginx 一共处理的请求次数​

Reading:nginx 读取到客户端的 headers 数量​

Writing:nginx 响应给客户端的 headers 数量

Waiting:nginx处理完毕请求之后,等待下一次的请求驻留的连接数量

#####    waiting值 = active -( reading + writing )

使用ab命令,对nginx进行压力测试

1.安装ab命令

yum install http-tools -y

2.使用ab命令对nginx发送大量的连接

-n 请求数量 #一共发出多少个请求  -n 1000
-c  请求并发数  -c 100
-k #表示启动keepalived保持连接功能
ab -kc 100 -n 500000 http://127.0.0.1/

nginx错误日志

nginx 能够把自身运行时故障的信息,也写入到对应的日志文件中,称之为 error_log
对于错误信息的调试,也是运维人员维护 nginx 的一个重要的手段
nginx 想要使用 error_log 就得打开 nginx.conf,找到关键字参数 error_log,它是放在 http {} 称之为全局的变量参数,针对所有的 server {} 虚拟主机生效
也可以单独的写在虚拟主机中,单独记录某一个虚拟主机的错误日志

nginx.conf
user www;
http{error_log logs/cc_error.log;
server{error_log logs/s1_error.log;
}server {error_log logs/s2_error.log;
}}

错误日志的语法
error_log file level;

日志级别有如下几种
debug
info
notice
warn
error
crit
alert
emerg

这个级别是越来越严重,级别写的越低,记录的日志越详细,没有必要。。。
级别越高,日志记录的内容就越少 ,生产环境下常用的是 warn,error,crit 模式
日志的级别,可能会给服务器增加额外的大量 IO 消耗,因此,根据你实际的工作环境需膝盖

针对虚拟主机添加错误日志的部分代码

​
server {#定义虚拟主机站点的端口号,也是用户访问网站的入口listen 80;#填写虚拟主机的域名配置,没有域名就可以写 localhost 或者 __ 也行server_name learn_nginx.com;#server_name www.chaoge.cc;#给 nginx 定义网站的编码charset utf-8;error_log logs/learn_nginx_error.log;#nginx 的路径匹配规则#如下的规则是最低级匹配,任何的 nginx 请求,都会进入如下 location 的配置,去它所定义的目录中寻找资料location / {#root 关键词 是定义网页根目录的,这个 html 是以 nginx 安装的路径为相对root /www/learn_nginx;...
}
}​

nginx location匹配

nginx的location作用,是根据用户访问的url,进行不同的处理方式 针对用户请求的网站URL进行匹配处理,然后进行对应的处理

location在nginx.conf的写法

location / {# root关键词 是定义网页根目录的,这个html是以nginx安装的路径为相对root    /www/learn_nginx;# index关键词,定义nginx的首页文件名字,默认找那个文件index   index.html index.htm;
}

location相关语法

location [ = | ~ | ~* | ^~ ] url {
    # 做出的相应的处理动作
}

# nginx有关location的匹配 符号如下

匹配符    匹配规则    优先级
=         精确匹配    1
^~        以某个字符开头 不做正则处理    2
~*        支持正则的匹配模式    3
/blog/    当你访问 192.168.178.100/blog/xxxx    4
/         通用匹配,不符合其他的location的匹配规则,就走到这里    5

表示nginx.conf支持在虚拟主机中定义多个location,进行用户的请求url解析

server {location = {}location / {}location ~* {}
}

nginx的location实战演练如下

准备一个nginx的配置文件,来练习location语法

server {listen listen 80;server_name _;#最低级匹配,不符合其他location就来这location / {return 401;}#优先级最高location = {return 402;}#以/blog/开头的url,到这里,如符合其他location,则以其他优先location /blog/ {return 403;}#匹配任何以/img/开头的请求,不匹配正则location ^~/img/ {return 404;}#匹配任何以.gif结尾的请求,支持正则location ~*\.(gif|jpg|jepg)$ {return 500;}
}

nginx的url地址重写功能

Nginx的url地址重写功能,主要是使用nginx提供的rewrite功能,且支持正则表达式
rewrite能够实现url的跳转,实现url规范化,根据请求的变量实现url跳转等等,基于url重写功能常见的效果如下
对于爬虫程序的封禁,让其跳转到一个错误的页面
动态的url,伪装成静态的html页面,便于搜索引擎的抓取
新旧域名的更新,替换,www.aruiya.com > www.aruillya.com.cn.

rewrite语法

rewrite ^(.*) http://192.168.178.134/$1  permanent;


rewrite 是nginx地址重写的关键词指令,开启跳转功能
正则 ^(.*) 表示匹配所有的请求,匹配成功后,跳转到后面指定的url地址
$1 是取出前面正则表达式分组括号里的内容
permanent 表示301 重定向的标记

rewrite结尾的参数标记如下

Last 规则匹配完成后,继续向下匹配新的location
break 本条规则匹配完成后,立即停止匹配动作
Redirect 返回302临时重定向状态码,浏览器地址栏显示跳转后的url,爬虫不会更新该url
Permanent 返回301永久重定向,浏览器地址也显示跳转后的url,爬虫更新该网站url

last和break用于实现url重写,浏览器的地址栏不会发生变化
redirect和permanent也是用于url跳转,浏览器url地址栏发生边变化,跳转到新的url地址栏

实现一个301URL跳转

# 准备一个虚拟主机的配置文件,实现,当用户访问该虚拟主机,直接跳转到百度页面

vim extra/learn_rewrite.confserver {listen 90;server_name _;#最低级请求配,所有请求都走到这里location / {rewrite ^(.*) http://www.baidu.com/$1  permanent;}
}

 nginx认证

nginx提供了认证模块,语法是

location / {auth_basic 'string';auth_basic_user_file conf/htpasswd;
}

linux提供了密码生成命令
htpasswd 是apache提供的密码生成工具,nginx也支持auth_basic模块,因此我们可以利用Htpasswd命令生成账号密码文件,提供给nginx去使用

yum install httpd-tools -y
#语法
htpasswd -bc .access username password#解释
-b 在命令行中输入 账号密码
-c 创建密码文件
username 账号
password 密码默认.access文件采用加密方式md5来验证

实际操作案例

1.准备一个练习认证模块的配置文件,注意,还未制定密码文件

server{listen 97;server_name _;location / {root html/learn_auth;index index.html;auth_basic "learn nginx auth_module";auth_basic_user_file}
}

生成密码文件

htpasswd -bc ./htpasswd aruiya 20030810 

相关文章:

  • 【threejs】每天一个小案例讲解:常见材质
  • 单链表经典算法题之分割链表
  • SPRING AI 入门
  • TCN+Transformer+SE注意力机制多分类模型 + SHAP特征重要性分析,pytorch框架
  • Docker 网络模式
  • Golang启用.exe文件无法正常运行
  • SM4 与 AES 在 GPU 上的性能比较
  • GAN+ECA注意力机制实现图像超分辨率重建
  • 第七十九篇 大数据开发基石:堆数据结构解析与生活化应用
  • Vue3 计算属性 computed
  • 在macOS上运行Linux容器的方法
  • G1周打卡——GAN入门
  • linux 中pdf 的自动分页工具
  • 专题:2025年跨境B2B采购买家行为分析及采购渠道研究报告|附160+份报告PDF汇总下载
  • 【Go-补充】实现动态数组:深入理解 slice 与自定义实现
  • 2025年硬件实习/秋招面试准备
  • Cordova移动应用对云端服务器数据库的跨域访问
  • Python原生爬虫教程:微店商品详情API接口攻略指南
  • 手写muduo网络库(七):深入剖析 Acceptor 类
  • 如何正确评估服务器CPU/内存/IO利用率 (性能过剩or瓶颈)
  • wordpress 资讯类模板/周口网站seo
  • 网站建设合作流程/seo免费入门教程
  • 做网站推广一年多少钱/郴州网站建设网络推广平台
  • 国内新闻最新消息今天疫情/搜索引擎优化实训
  • 上海 网站开发 工作室/搜索引擎排名优化seo
  • 天河建设网站设计/lol今日赛事直播