linu中的nginx(LNMP架构)

本文详细介绍了在Linux环境下如何进行nginx的平滑升级,包括使用-HUP和-USR2信号进行升级和降级操作,以及如何通过启动脚本管理nginx。此外,还涉及了nginx的配置文件检查、版本查看、并发量和下载速度限制、图片共享、HTTPS加密、重定向以及防盗链等企业中常见的配置和管理任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.nginx的平滑升级
原理:
Ngnix中的进程分为两类,一类是master进程(主进程),一类是worker进程(工作进程)。
原理就是首先我们先会替换master进程,同时我们替换的master是与老版本的worker兼容的。下一步,就是保持还有连接的worker进程,待其老去退休,进行替换。

准备两个不同版本的nginx的压缩包
nginx-1.16.0.tar.gz
nginx-1.15.8.tar.gz

步骤
1.首先要配置一个1.16.0版本的nginx

安装需要的依赖工具
[root@server1 ~]# yum install gcc pcre-devel zlib-devel -y
解压
[root@server1 ~]# tar zxf nginx-1.16.0.tar.gz 
编译安装前关闭debug日志
[root@server1 ~]# cd nginx-1.16.0
[root@server1 nginx-1.16.0]# vim auto/cc/gcc  
171 # debug
172 #CFLAGS="$CFLAGS -g"      ##注释掉(关闭debug日志)
进入解压目录,进行编译安装
[root@server1 nginx-1.16.0]# ./configure --prefix=/usr/local/nginx
[root@server1 nginx-1.16.0]# make
[root@server1 nginx-1.16.0]# make install

/usr/local/nginx/sbin/nginx -v##查看这时nginx的版本号

2.平滑升/降级
解压不同版本的nginx压缩包

[root@server1 ~]# tar zxf nginx-1.15.8.tar.gz 

同样要关闭debug日志

[root@server1 ~]# cd nginx-1.15.8
[root@server1 nginx-1.15.8]# vim auto/cc/gcc 
171 # debug
172 #CFLAGS="$CFLAGS -g"      ##注释掉(关闭debug日志)

进入新版本的解压目录,进行编译
注意:不要make install,会导致原先的主程失控

[root@server1 nginx-1.15.8]# ./configure --prefix=/usr/local/nginx/
[root@server1 nginx-1.15.8]# make

将原来的二进制系统程序文件备份一下,以防新升级后的nginx出问题可以方便恢复

[root@server1 ~]# cd /usr/local/nginx/sbin/
[root@server1 sbin]# ls
nginx
[root@server1 sbin]# cp nginx nginx.old   

替换二进制文件
新版本通过编译之后,源码包里的objs目录里便有了新的nginx文件,替换原来的nginx二进制文件

[root@server1 ~]# cd nginx-1.15.8
[root@server1 nginx-1.15.8]# cd objs/
[root@server1 objs]# cp -f nginx /usr/local/nginx/sbin/nginx  
cp: overwrite ‘/usr/local/nginx/sbin/nginx’? y

-f 强制,如果不加-f,原来的nginx仍在运行,就不会覆盖

进行平滑升级
-HUP 平滑启动(相当于reload)
-USR2 平滑升级可执行程序,主要用在版本升级
-WINCH 从容关闭工作进程
-USR1 重新打开日志文件,主要用在日志切割(相当于reopen)
(1)kill -USR2 旧版本主进程号
执行新的主进程(新版本)和新的工作进程,依次启动新的主进程和新的工作进程,现在新,旧版本的nginx实例会同时运行,共同处理请求
在这里插入图片描述
在这里插入图片描述
(2)kill -WINCH 旧版本主进程号
发送WINCH信号给旧版主进程,旧版主进程就开始从容关闭
在这里插入图片描述
再查看版本号, 就平滑升级成了新的版本

在这里插入图片描述
3.恢复原来版本
(1)将原来备份好旧版本的二进制文件的再复制回去

[root@server1 objs]# cd /usr/local/nginx/sbin/
[root@server1 sbin]# ls
nginx  nginx.old
[root@server1 sbin]# cp nginx.old nginx -f 
cp: overwrite ‘nginx’? y

(2) kill -HUP 旧版本的主进程号

nginx将在不重载配置文件的情况下启动旧版的worker进程
在这里插入图片描述

(3)kill -USR2 新版本的主进程号
依次启动新的主进程(旧版本)和新的工作进程,现在两个版本的nginx实例会同时运行,共同处理请求
在这里插入图片描述
(4) kill -WINCH 新版本主进程号
发送WINCH信号给新版主进程,新版主进程就开始从容关闭
在这里插入图片描述
再查看版本号, 恢复成了旧版本
在这里插入图片描述
二.nginx启动脚本
1.我们可以安装一个httpd服务,在httpd服务的启动脚本加以修改,制作nginx的启动脚本

[root@server1 ~]# yum install httpd -y
[root@server1 ~]# cd /usr/lib/systemd/system
[root@server1 system]# cp httpd.service /etc/systemd/system/nginx.service

2.修改启动脚本

[root@server1 system]# cd /etc/systemd/system
[root@server1 system]# vim nginx.service 
[Unit]
Description=The Nginx Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

在这里插入图片描述
3.重新载入systemd,扫描新的或有变动的单元

[root@server1 system]# systemctl daemon-reload

4.然后尝试启动,查看状态,关闭,设置开机自启,等等
注意:如果出现不能开启的状况
处理方式:
(1)查看nginx.pid,并杀掉

[root@server1 ~]# cat /usr/local/nginx/logs/nginx.pid
6101
[root@server1 ~]# kill -9 6101

(2)ps ax 杀掉所有占用nginx进程的pid
在这里插入图片描述
(3)实验效果
在这里插入图片描述
在这里插入图片描述
三.nginx的语法检测(为配置文件提供高亮)
在讲解配置文件之前,我们给配置文件加高亮方便配置文件的查看及排错

[root@server1 contrib]# cd        ##必须切换到主目录下
[root@server1 ~]# mkdir .vim
[root@server1 ~]# cd nginx-1.14.2/contrib/
[root@server1 contrib]# cp -r vim/* ~/.vim
测试查看
[root@server1 nginx-1.14.2]# cd /usr/local/nginx/conf/
[root@server1 conf]# vim nginx.conf

在这里插入图片描述
四.如何查看nginx的版本和编辑加载过的模块

[root@server1 ~]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.16.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) 
configure arguments: --prefix=/usr/local/nginx

五.配置文件中典型参数

#Nginx的worker进程运行用户以及用户组
user  nobody nobody;


#Nginx开启的进程数,建议为CPU的核数
worker_processes  1;
#worker_processes auto;


#以下参数指定了哪个cpu分配给哪个进程,一般来说不用特殊指定。如果一定要设的话,用0和1指定分配方式.
#这样设就是给1-4个进程分配单独的核来运行,出现第5个进程是就是随机分配了。eg:
worker_processes 4     #4核CPU 
worker_cpu_affinity 0001 0010 0100 1000

#定义全局错误日志定义类型,[debug|info|notice|warn|crit]
error_log  logs/error.log  info;

#指定进程ID存储文件位置
#pid        logs/nginx.pid;

#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。
#vim /etc/security/limits.conf
#  *                soft    nproc          65535
#  *                hard    nproc          65535
#  *                soft    nofile         65535
#  *                hard    nofile         65535
worker_rlimit_nofile 65535;  

在这里插入图片描述
在这里插入图片描述
六.企业中打包nginx的日志

#打开nginx
[root@server1 ~]# cd /usr/local/nginx/logs/
[root@server1 logs]# ls             ##我们要打包access.log
access.log  error.log  nginx.pid  nginx.pid.oldbin
#首先我们可以先实现打出前一天的日期
[root@server1 logs]# date +%F -d -1day     打出前一天的日期信息
2019-05-05
[root@server1 logs]# mv access.log `date +%F -d -1day`_access.log
[root@server1 logs]# ls 
2019-05-05_access.log  error.log  nginx.pid  nginx.pid.oldbin
[root@server1 logs]# /usr/local/nginx/sbin/nginx -s reopen
[root@server1 logs]# ls
2019-05-05_access.log  access.log  error.log  nginx.pid  nginx.pid.oldbin

如何实现每日自动化打包日志

mkdir oldlogs									##创建旧日志存放文件夹
vim /usr/local/nginx/logs/backup.sh				##编辑脚本文件
#! /bin/bash

LOG_PATH=/usr/local/nginx/logs/oldlogs
CUR_LOG_PATH=/usr/local/nginx/logs
YESTERDAY=$(date +%F -d -1day)

mv $CUR_LOG_PATH/access.log $LOG_PATH/${YESTERDAY}_access.log
mv $CUR_LOG_PATH/error.log $LOG_PATH/${YESTERDAY}_error.log

kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)

chmod +x backup.sh				##添加执行权限

在这里插入图片描述

crontab -e							##创建延时任务
0 0 * * *    /bin/bash   /usr/local/nginx/logs/backup.sh

七.对客户端并发量,下载速度的限制

1.限制客户端请求的并发量为1

编辑配置文件

[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
 32    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;;
 48         location /download/ {    # download是客户端访问nginx的一个发布目录
 49             limit_req zone=one;    # 并发量为1
 50         }

在这里插入图片描述

在/usr/local/nginx/html/下创建目录download/,并放入一个图片

[root@server1 conf]# cd /usr/local/nginx/html/
[root@server1 html]# mkdir download
[root@server1 html]# cd download/
[root@server1 download]# ls
vim.jpg
[root@server1 download]# du -h vim.jpg 
444K	vim.jpg

重启服务

[root@server1 sbin]# /usr/local/nginx/sbin/nginx -s reload

测试
模拟客户端的请求,并发量为1,没有错误请求

[root@server1 sbin]# ab -c 1 -n 10 http://172.25.26.1/download/vim.jpg

在这里插入图片描述
如果并发为10 ,即-c 10,则错误为9
在这里插入图片描述
2.限制客户端下载速率为50k

 48         location /download/ {
 49             limit_req zone=one ;
 50             limit_rate 50k;
 51         }

在这里插入图片描述

[root@server1 sbin]# /usr/local/nginx/sbin/nginx -s reload
[root@server1 sbin]# ab -c 1 -n 10 http://172.25.26.1/download/vim.jpg	##重启测试

在这里插入图片描述
3.指定最大突发请求数

[root@server1 sbin]# vim /usr/local/nginx/conf/nginx.conf
 33     #gzip  on;
 34     limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
       说明:区域名称为one(自定义),占用空间大小为10m,平均处理的请求频率不能超过每秒一次
 50         location /download/ {
 51             #limit_rate 50k;
 52             limit_req zone=one burst=5;  #burst用于指定最大突发请求数。许多场景下,单一地限制rate并不能满足需求,设置burst,可以延迟处理超过rate限制的请求。
 53         }

在这里插入图片描述

[root@server1 sbin]# /usr/local/nginx/sbin/nginx -s reload
[root@server1 sbin]# ab -c 1 -n 10 http://172.25.26.1/download/vim.jpg

在这里插入图片描述
八.图片共享
1.将nginx关掉,重新编译,加载新的模块

[root@server1 ~]# /usr/local/nginx/sbin/nginx -s stop
[root@server1 ~]# cd nginx-1.16.0
[root@server1 nginx-1.16.0]# make clean   ##重新编译之前要make clean
[root@server1 nginx-1.16.0]# yum install -y gd-devel-2.0.35-26.el7.x86_64.rpm     ##安装
[root@server1 nginx-1.16.0]# ./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_image_filter_module=dynamic      ##添加图形动态模块
[root@server1 nginx-1.16.0]# make     ##不要make install(除了第一次编译)

2.将新的二进制文件替换原来的nginx二进制文件

[root@server1 nginx-1.16.0]# cd objs/
[root@server1 objs]# cp nginx /usr/local/nginx/sbin/nginx
cp: overwrite ‘/usr/local/nginx/sbin/nginx’? y

3.创建新的模块目录,并将图像模块放在目录下

[root@server1 objs]# mkdir /usr/local/nginx/modules
[root@server1 objs]# ls
autoconf.err        ngx_http_image_filter_module_modules.c
Makefile            ngx_http_image_filter_module_modules.o
nginx               ngx_http_image_filter_module.so
nginx.8             ngx_modules.c
ngx_auto_config.h   ngx_modules.o
ngx_auto_headers.h  src
[root@server1 objs]# cp ngx_http_image_filter_module.so /usr/local/nginx/modules/

4.编写配置文件

[root@server1 objs]# cd /usr/local/nginx/conf/
[root@server1 conf]# vim nginx.conf
  1 load_module modules/ngx_http_image_filter_module.so;
      
 48         location /download/ {
 49                 image_filter resize 100 200;
 50                 #limit_rate 50k;
 51         }
[root@server1 objs]# systemctl start nginx

在浏览器输入172.25.26.1/download/vim.jpg 可以看到图片
在这里插入图片描述
但是我们发现,客户想下载图片,就需要在浏览器输入的时候加上图片名称,这样显然是不合理的
我们需要继续修改配置文件
在这里插入图片描述
再在浏览器输入http://172.25.26.1/download/
这样,我们可以在download目录下可以放很多东西,客户想看哪个进行选择即可。
在这里插入图片描述

我们还可以设置图片的额报错期限

编辑配置文件
location ~ .*.(jpg|png|css|js)?$ {
expires 30d; ##设置为30天
}
在这里插入图片描述
测试

[root@server1 objs]# curl -I 172.25.26.1/download/vim.jpg
HTTP/1.1 200 OK
Server: nginx/1.16.0
Date: Mon, 06 May 2019 15:09:07 GMT
Content-Type: image/jpeg
Content-Length: 453575
Last-Modified: Mon, 06 May 2019 14:01:56 GMT
Connection: keep-alive
ETag: "5cd03e54-6ebc7"
Expires: Wed, 05 Jun 2019 15:09:07 GMT			##这里会显示到期日
Cache-Control: max-age=2592000
Accept-Ranges: bytes

九.实现https加密
1.关掉原来的nginx,重新编译,添加ssl模块

[root@server1 ~]# /usr/local/nginx/sbin/nginx -s stop
[root@server1 ~]# cd nginx-1.16.0
[root@server1 nginx-1.16.0]# make clean
rm -rf Makefile objs
[root@server1 nginx-1.16.0]# yum install -y openssl-devel 
[root@server1 nginx-1.16.0]# ./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_image_filter_module=dynamic --with-http_ssl_module

[root@server1 nginx-1.16.0]# make

在这里插入图片描述
2.将新生成的二进制文件替代原来的,并且要再次将图像模块放入modules目录下

[root@server1 nginx-1.16.0]# cd objs/
[root@server1 objs]# cp nginx /usr/local/nginx/sbin/nginx
cp: overwrite ‘/usr/local/nginx/sbin/nginx’? y
[root@server1 objs]# ls
autoconf.err        ngx_http_image_filter_module_modules.c
Makefile            ngx_http_image_filter_module_modules.o
nginx               ngx_http_image_filter_module.so
nginx.8             ngx_modules.c
ngx_auto_config.h   ngx_modules.o
ngx_auto_headers.h  src
[root@server1 objs]# cp ngx_http_image_filter_module.so /usr/local/nginx/modules/
cp: overwrite ‘/usr/local/nginx/modules/ngx_http_image_filter_module.so’? y

3.生成证书

[root@server1 certs]# cd /etc/pki/tls/certs/
[root@server1 certs]# make cert.pem

在这里插入图片描述
将锁和钥匙放在nginx的配置文件目录下
[root@server1 certs]# cp cert.pem /usr/local/nginx/conf/
4.http的正常访问
编写配置文件

[root@server1 certs]# cd /usr/local/nginx/conf/
[root@server1 conf]# vim nginx.conf
126 server {
127         listen 80;
128         server_name www.westos.org;
130 
131         location / {
132                 root /web;
133                 index index.html;
134         }
135 }

在这里插入图片描述
重启nginx服务

[root@server1 conf]# /usr/local/nginx/sbin/nginx 
[root@server1 conf]# /usr/local/nginx/sbin/nginx -s reload

添加域名解析

[root@server1 conf]# vim /etc/hosts
172.25.26.1     www.westos.org

创建/web,并编写测试页

[root@server1 /]# cd 
[root@server1 ~]# mkdir /web
[root@server1 ~]# cd /web/
[root@server1 web]# vim index.html
www.westos.org
[root@server1 web]# curl www.westos.org		##测试:访问正常
www.westos.org

5.重新编写配置文件,实现http—>https

[root@server1 web]# vim /usr/local/nginx/conf/nginx.conf
105     # HTTPS server
106     #
107     server {
108         listen       443 ssl;
109         server_name  www.westos.org;
110 
111         ssl_certificate      cert.pem;
112         ssl_certificate_key  cert.pem;
113 
114         ssl_session_cache    shared:SSL:1m;
115         ssl_session_timeout  5m;
116 
117         ssl_ciphers  HIGH:!aNULL:!MD5;
118         ssl_prefer_server_ciphers  on;
119 
120         location / {
121             root   /web;
122             index  index.html index.htm;
123         }
124     }
125 
126 server {
127         listen 80;
128         server_name www.westos.org;
129         rewrite ^/(.*)$ https://www.westos.org/;
130 
131         location / {
132                 root /web;
133                 index index.html;
134         }
135 }

检测语法错误,并重新加载配置文件

[root@server1 web]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@server1 web]# /usr/local/nginx/sbin/nginx -s reload

6.测试
在测试主机中添加域名解析

[root@foundation19 ~]# vim /etc/hosts
172.25.26.1 www.westos.org     

然后进入浏览器输入www.wetsos.org,第一次进入,浏览器会让你添加证书
在这里插入图片描述
添加证书
在这里插入图片描述
在这里插入图片描述
访问正常
在这里插入图片描述
十.nginx实现重定向
1.将www.westos.org重定向到https://www.westos.org

server {
        listen 80;
        server_name www.westos.org;
        rewrite ^/(.*)$ https://www.westos.org/;    

在这里插入图片描述
测试(302表示重定向)

[root@server1 web]# curl -I www.westos.org
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.16.0
Date: Tue, 07 May 2019 08:47:55 GMT
Content-Type: text/html
Content-Length: 145
Connection: keep-alive
Location: https://www.westos.org/

但是我们发现当访问 www.westos.org/test.jpg 的时候,就不能正确访问转到 https://www.westos.org/test.jpg

[root@server1 web]# curl -I www.westos.org/test.jpg
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.16.0
Date: Tue, 07 May 2019 08:49:19 GMT
Content-Type: text/html
Content-Length: 145
Connection: keep-alive
Location: https://www.westos.org/

编辑配置文件,添加$1: ##$1表示后面可以跟文件,否则会报错

[root@server1 web]# vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述

[root@server1 web]# /usr/local/nginx/sbin/nginx -s reload

测试:

[root@server1 web]# curl -I www.westos.org/test.jpg
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.16.0
Date: Tue, 07 May 2019 08:52:39 GMT
Content-Type: text/html
Content-Length: 145
Connection: keep-alive
Location: https://www.westos.org/test.jpg

如果后面加permanent参数,表示永久重定向

[root@server1 web]# vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述

[root@server1 web]# /usr/local/nginx/sbin/nginx -s reload
[root@server1 web]# curl -I www.westos.org/test.jpg
HTTP/1.1 301 Moved Permanently
Server: nginx/1.16.0
Date: Tue, 07 May 2019 08:54:52 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Location: https://www.westos.org/test.jpg

[root@server1 web]# curl -I www.westos.org/
HTTP/1.1 301 Moved Permanently
Server: nginx/1.16.0
Date: Tue, 07 May 2019 08:55:43 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Location: https://www.westos.org/

2.将 www.westos.org/bbs/index.html 重定向到 https://bbs.westos.org/index.html
编辑配置文件

[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
126 server {
127         listen 80;
128         server_name www.westos.org;
129         #rewrite ^/(.*)$ https://www.westos.org/$1 permanent;       
130         rewrite ^/bbs/(.*)$  http://bbs.westos.org/$1;
131         location / {
132                 root /web;
133                 index index.html;
134         }
135 }
136 
137 server {
138         listen 80;
139         server_name bbs.westos.org;
140 
141         location / {
142                 root /bbs;
143                 index index.html;
144         }
145 }

在这里插入图片描述
创建/bbs目录,并编写测试页

[root@server1 certs]# mkdir /bbs
[root@server1 certs]# cd /bbs/
[root@server1 bbs]# vim index.html
bbs.westos.org

添加解析

[root@server1 ~]# vim /etc/hosts
172.25.26.1	server1 www.westos.org bbs.westos.org

浏览器可以访问到 bbs.westos.org
在这里插入图片描述

测试:

[root@server1 ~]# curl -I www.westos.org/bbs/
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.16.0
Date: Tue, 07 May 2019 09:48:43 GMT
Content-Type: text/html
Content-Length: 145
Connection: keep-alive
Location: http://bbs.westos.org/

[root@server1 ~]# curl -I www.westos.org/bbs/index.html
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.16.0
Date: Tue, 07 May 2019 09:44:38 GMT
Content-Type: text/html
Content-Length: 145
Connection: keep-alive
Location: http://bbs.westos.org/index.html

3.将bbs.westos.org转到http://www.westos.org/bbs下

直接将/bbs这个目录放到/web下的方式:

[root@server1 ~]# cd /web/
[root@server1 web]# cp -r /bbs/ .
[root@server1 web]# ls
bbs  index.html

编辑配置文件

[root@server1 web]# vim /usr/local/nginx/conf/nginx.conf

126 server {
127         listen 80;
128         server_name www.westos.org bbs.westos.org;
129         #rewrite ^/(.*)$ https://www.westos.org/$1 permanent;       
130         #rewrite ^/bbs/(.*)$  http://bbs.westos.org/$1; 
131         if ($host = "bbs.westos.org"){
132                 rewrite ^/(.*)$  http://www.westos.org/bbs/$1;
133         }
134         location / {
135                 root /web;
136                 index index.html;
137         }
138 }
139 
140 #server {
141 #       listen 80;
142 #       server_name bbs.westos.org;
143 #
144 #       location / {
145 #               root /bbs;
146 #               index index.html;
147 #       }
148 #}

在这里插入图片描述

[root@server1 web]# /usr/local/nginx/sbin/nginx -s reload

测试:

[root@server1 web]# curl -I bbs.westos.org
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.16.0
Date: Tue, 07 May 2019 09:56:20 GMT
Content-Type: text/html
Content-Length: 145
Connection: keep-alive
Location: http://www.westos.org/bbs/

[root@server1 web]# curl -I bbs.westos.org/index.html
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.16.0
Date: Tue, 07 May 2019 09:56:28 GMT
Content-Type: text/html
Content-Length: 145
Connection: keep-alive
Location: http://www.westos.org/bbs/index.html

十一.防盗链
1.测试端添加解析

[root@foundation26 ~]# vim /etc/hosts
[root@foundation26 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.250	content.example.com
172.25.26.1	www.westos.org
172.25.26.1	bbs.westos.org
172.25.26.2	daolian.westos.org			##添加

2.新安装一台nginx主机,并编写配置文件

[root@server2 conf]# vim /usr/local/nginx/conf/nginx.conf
 35     server {
 36         listen       80;
 37         server_name  localhost;
 38         rewrite ^(.*) http://www.westos.org;
117 server {
118         listen 80;
119         server_name daolian.westos.org;
120         charset utf-8;
121 
122         location / {
123                 root /web;
124                 index index.html;
125         }
126 }

3.server2添加解析,并创建/web目录,编写测试页

[root@server2 web]# cat /etc/hosts
172.25.79.2	server2 daolian.westos.org

[root@server2 ~]# mkdir /web
[root@server2 ~]# cd  /web/
[root@server2 web]# vim index.html
<html>
<body>
<br>盗链图片</br>
<img src="http://www.westos.org/vim.jpg">       ##盗取server1上的图片vim.jpg
</body>
</html>

在这里插入图片描述
4.在server1的/web/目录放入图片(盗链地址的默认发布目录)

[root@server1 html]# cp vim.jpg /web/

5.测试
在这里插入图片描述
那么我们如何防盗链
在server1上重新编写配置文件

location / {
        root /web;
        index index.html;
}

location ~* \.(gjf|jpg|png|jpeg)$ {
        root /web;
        valid_referers none blocked www.westos.org;
        if ($invalid_referer) {
                #rewrite ^/ http://bbs.westos.org/daolian.jpg;
                return 403;
        }
}

在这里插入图片描述
2. 浏览器再次此时,这回图片裂开了,说明防盗链成功
在这里插入图片描述
如果我们想给盗链客户返回一张图片,而不是裂开的图片,又该怎么办呢?

将我们想放的图片放到/bbs下

[root@server1 ~]# cd /bbs/
[root@server1 bbs]# ls
daolian.jpg  index.html         ##这个daolian.jpg是我想放的图片

修改配置文件如下:

server {
        listen 80;
        server_name www.westos.org ;
        #rewrite ^/(.*)$ https://www.westos.org/$1 permanent;   
        #rewrite ^/bbs/(.*)$  http://bbs.westos.org/$1; 
        #if ($host = "bbs.westos.org"){
        #       rewrite ^/(.*)$  http://www.westos.org/bbs/$1;
        #}
        location / {
                root /web;
                index index.html;
        }

        location ~* \.(gjf|jpg|png|jpeg)$ {
                root /web;
                valid_referers none blocked www.westos.org;
                if ($invalid_referer) {
                        rewrite ^/ http://bbs.westos.org/daolian.jpg;
                }
        }
}

server {
        listen 80;
        server_name bbs.westos.org;

        location / {
                root /bbs;
                index index.html;
        }
}

在这里插入图片描述
再次测试:
在这里插入图片描述

### 如何在Linux系统中安装Nginx #### 安装前准备 为了确保Nginx能够正常运行,在安装之前需要确认系统的环境已经满足其需求。通常情况下,这涉及安装一些必要的依赖库[^2]。 ```bash yum -y install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl-devel ``` 上述命令会自动安装编译Nginx所需的工具链以及相关的开发库文件[^3]。 --- #### 下载并解压Nginx源码包 通过官方渠道获取最新版本的Nginx压缩包,并将其保存到本地路径中: ```bash wget http://nginx.org/download/nginx-1.16.1.tar.gz tar zxvf nginx-1.16.1.tar.gz cd nginx-1.16.1/ ``` 此操作可以下载指定版本号的Nginx软件包,并对其进行解压以便后续配置和构建过程。 --- #### 配置与编译 进入解压后的目录后执行`./configure`脚本来设置编译选项,随后利用Makefile完成实际编译工作: ```bash ./configure --prefix=/usr/local/nginx make && make install ``` 这里指定了最终安装的目标位置为`/usr/local/nginx`,用户也可以根据实际情况调整参数列表中的具体值[^4]。 --- #### 创建启动所需结构化目录 如果尚未存在,则需手动建立用于存放日志、静态资源等内容的基础框架体系;当然,默认安装流程一般都会准备好这些基本要素[^5]: ```bash mkdir -p /usr/local/nginx/{conf,html,logs,sbin} ``` 不过按照标准实践来看,上面这条指令可能并非总是必需,因为正式部署时往往采用更专业的分离策略来管理各类数据存储区域。 --- #### 启动服务验证状态 当所有前期准备工作均已完成之后即可尝试首次激活Web服务器实例: ```bash /usr/local/nginx/sbin/nginx ps aux | grep 'nginx' ``` 第一条命令负责真正开启守护进程监听外部请求连接端口80或其他自定义设定数值;而第二条则用来检查当前是否有对应名称的服务正在活跃运转当中。 --- #### 测试页面展示效果 最后一步便是打开任意一台联网设备上的现代图形界面浏览器输入目标主机IP地址或者域名字符串形式表达式查看默认欢迎画面呈现状况如何。 ```python print("http://your_server_ip_or_domain/") ``` 此时应该可以看到由Nginx生成的标准测试页证明整个安装环节顺利完成无误。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值