Nginx(多路复用、代理、https、重定向<rewrite>、盗链与反盗链)

以下实验为rhel7.3版本

一、I/O多路复用

input/outpu==>I/O
1)select -->apache —>一次只能处理1024个请求,但是返回时会轮询所有的请求用户
2)poll
3)epoll–>nginx–>

503报错–> 服务器端不可以

1、日至切割、限制并发
1).安装nginx
[root@server1 nginx]# tar zxf nginx-1.15.9.tar.gz
[root@server1 nginx]# ls
gd-devel-2.0.35-26.el7.x86_64.rpm  nginx-1.14.2.tar.gz  nginx-1.15.9.tar.gz
nginx-1.10.3.tar.gz                nginx-1.15.9         vim.jpg
[root@server1 nginx]# cd nginx-1.15.9
[root@server1 nginx-1.15.9]# cd auto/cc/
[root@server1 cc]# vim gcc 
	171 # debug
	172 #CFLAGS="$CFLAGS -g"

[root@server1 cc]# cd /root/nginx/nginx-1.15.9/src/core/
[root@server1 core]# pwd
/root/nginx/nginx-1.15.9/src/core
[root@server1 core]# vim nginx.h 	 ##此步骤用于隐藏nginx的版本,安全
	14 #define NGINX_VER          "nginx/" 
[root@server1 nginx-1.15.9]# yum install gcc -y
[root@server1 nginx-1.15.9]# ./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_image_filter_module=dynamic --with-http_ssl_module

报错
statically from the source with nginx by using --with-pcre=<path> option.

在这里插入图片描述

[root@server1 nginx-1.15.9]# yum install pcre-devel openssl-devel -y
[root@server1 nginx-1.15.9]# cd ..
[root@server1 nginx]# ls
gd-devel-2.0.35-26.el7.x86_64.rpm  nginx-1.14.2.tar.gz  nginx-1.15.9.tar.gz
nginx-1.10.3.tar.gz                nginx-1.15.9         vim.jpg
[root@server1 nginx-1.15.9]# yum list gd	##看到gd系统版本,找安装包时看,根据版本去找对应的安装包
	Installed Packages
	gd.x86_64                              2.0.35-26.el7

[root@server1 nginx]# yum install gd-devel-2.0.35-26.el7.x86_64.rpm -y
[root@server1 nginx]# cd nginx-1.15.9
[root@server1 nginx-1.15.9]# ./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_image_filter_module=dynamic --with-http_ssl_module
[root@server1 nginx-1.15.9]# make && make install 
2).基本配置
[root@server1 nginx-1.15.9]# cd /usr/local/nginx/conf
[root@server1 conf]# vim nginx.conf

  2 user  nginx nginx;
  3 worker_processes  auto;
 12 events {
 13     use epoll;	##io多路复用
 14     worker_connections  1024;
 15 }
[root@server1 conf]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@server1 conf]# useradd nginx
[root@server1 conf]# 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 conf]# nginx 


进行压测
[root@foundation1 ~]# ab -c 1 -n 10000 http://172.25.47.1/index.html
3).裁剪日至、做限制并发

server1上

cd /usr/local/nginx/logs
[root@server1 logs]# cat access.log 	##查看
[root@server1 logs]# mv access.log `date +%F -d -1day`_access.log	##是数字1 不是L
##备份前一天的日至
[root@server1 logs]# ls
2019-04-22_access.log  error.log  nginx.pid
[root@server1 logs]# nginx -s reopen	##生成新的access.log日至文件
[root@server1 logs]# ls
2019-04-22_access.log  access.log  error.log  nginx.pid
[root@server1 logs]# cd ..
[root@server1 nginx]# cd conf/
[root@server1 conf]# vim nginx.conf

 35  limit_conn_zone $binary_remote_addr zone=addr:10m;
 36  limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
	#limit_conn_zone		##用来限制同一时间连接数,即并发限制
	#limit_req_zone 		##用来限制单位时间内的请求,即速率限制,采用漏桶算法“leaky bucket”
	#$binary_remote_addr 	##是限制同一个客户端ip地址
	#zone=one:10			##表示生成一个大小为10M,名字为one的内存区域,用来存储访问的频次信息
	#定义一个名为addr的limit_conn_zone $binary_remote_addr是限制同一客户端ip地址

 49         location /download {
 50         limit_conn addr 1;
 51 }
[root@server1 conf]# cd ..
[root@server1 nginx]# ls
client_body_temp  fastcgi_temp  logs     proxy_temp  scgi_temp
conf              html          modules  sbin        uwsgi_temp
[root@server1 nginx]# cd html/
[root@server1 html]# ls
50x.html  index.html
[root@server1 html]# mkdir download
[root@server1 html]# cd download/
[root@server1 download]# ls
[root@server1 download]# cp /root/nginx/vim.jpg .
[root@server1 download]# du -sh vim.jpg 
600K	vim.jpg

真机测试
ab -c 10 -n 1000 http://172.25.47.1/download/vim.jpg

Complete requests:      1000
Failed requests:        644

数据有丢失
server1
[root@server1 logs]# cat access.log

2、图片裁剪
1)配置
	[root@server1 logs]# cd ..
	[root@server1 nginx]# ls
	client_body_temp  fastcgi_temp  logs     proxy_temp  scgi_temp
	conf              html          modules  sbin        uwsgi_temp
	[root@server1 nginx]# cd modules/
	[root@server1 modules]# ls
	ngx_http_image_filter_module.so
	[root@server1 modules]# pwd
	/usr/local/nginx/modules
	[root@server1 modules]# cd /usr/local/nginx/conf/
	[root@server1 conf]# vim nginx.conf
	
	  1 load_module modules/ngx_http_image_filter_module.so;		##此处是modules目录下文件的路径
	 49         location /download {
	 50         limit_conn addr 1;
	 51         image_filter resize 150 100;	##裁剪
	 52 }
	[root@server1 conf]# 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 conf]# nginx -s reload
	[root@server1 conf]# cd ..
	[root@server1 nginx]# cd html/
	[root@server1 html]# cd download/
	[root@server1 download]# ls
	vim.jpg
	[root@server1 download]# du -sh vim.jpg 
	600K	vim.jpg
2)测试
真机浏览器
	172.25.47.1/download/vim.jpg
	F12
	F5可以看到图片大小

在这里插入图片描述

3、限速
1>配置
	[root@server1 download]# cd ..
	[root@server1 html]# cd ..
	[root@server1 nginx]# cd conf/
	[root@server1 conf]# vim nginx.conf
	 49         location /download {
	 50         limit_conn addr 1;
	 51         limit_rate 50k;		##限速50k
	 52         image_filter resize 150 100;
	 53 }
	[root@server1 conf]# nginx -s reload
2> 测试
	[root@foundation47 ~]# ab -c 10 -n 1000 http://172.25.47.1/download/vim.jpg
	速度会很慢

二、nginx代理

	主机				server1				server2					
	ip				172.25.47.1			172.25.47.2
	服务				服务器				 代理		
配置
1)server2安装nginx

祥见
https://blog.csdn.net/weixin_43697701/article/details/89455491
安装路径为/usr/local/nginx

2)配置服务器
	[root@server1 ~]# cd /usr/local/nginx/conf/
	[root@server1 conf]# vim nginx.conf
	 37     server {
	 38         listen       80;
	 39         server_name  localhost;
	 40         set_real_ip_from 172.25.47.2;		##从代理主机获取真实客户端ip
	 41         real_ip_header X-Forwarded-For;		##从报文头获取
	 42         real_ip_recursive on;				##开始获取真实客户端ip
	[root@server1 conf]# nginx -t
	[root@server1 conf]# nginx -s reload
	[root@server1 conf]# cd ..
	[root@server1 nginx]# ls
	client_body_temp  fastcgi_temp  logs     proxy_temp  scgi_temp
	conf              html          modules  sbin        uwsgi_temp
	[root@server1 nginx]# cd html/
	[root@server1 html]# ls
	50x.html  download  index.html
	[root@server1 html]# rm -fr index.html 
	[root@server1 html]# vim index.html		##写一个发布界面
		server1
3)配置代理
	[root@server2 conf]# pwd
	/usr/local/nginx/conf
	[root@server2 conf]# vim nginx.conf
	 17 http {
	 18     include       mime.types;
	 19     default_type  application/octet-stream;
	 20         upstream westos {
	 21         server 172.25.47.1:80;	##代理的是server1
	 22 }

	118 server {
	119         listen 80;
	120         server_name www.westos.org;
	121 
	122         location / {
	123                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	124                 proxy_pass http://westos;
	125         }
	126 }

	[root@server2 conf]# nginx -t
	[root@server2 conf]# nginx -s reload
4)测试

真机作解析
172.25.1.2 www.westos.org
在这里插入图片描述
[root@foundation47 ~]# curl www.westos.org
server1
访问的是server2,但是真实访问到的是server1
在这里插入图片描述
在server1上查看日至,可以看到250主机访问了
[root@server1 ]# cd /usr/local/nginx/logs
[root@server1 logs]# cat access.log
可以看到250主机访问
在这里插入图片描述

三、实现https

配置
1)修改配置文件
		[root@server1 conf]# pwd
		/usr/local/nginx/conf
		[root@server1 conf]# vim nginx.conf
		 38         listen       80;
		 39         #server_name  localhost;
		 40         #set_real_ip_from 172.25.47.2;
		 41         #real_ip_header X-Forwarded-For;
		 42         #real_ip_recursive on;
		 43         #charset koi8-r;
	
		106     server {
		107         listen       443 ssl;
		108         server_name  www.westos.org;  	##设置访问域名
		109 
		110         ssl_certificate      cert.pem;
		111         ssl_certificate_key  cert.pem;	##默认key文件
		112 
		113         ssl_session_cache    shared:SSL:1m;
		114         ssl_session_timeout  5m;
		115 
		116         ssl_ciphers  HIGH:!aNULL:!MD5;
		117         ssl_prefer_server_ciphers  on;
		118 
		119         location / {
		120             root   /web;			##创建一个虚拟主机
		121             index  index.html index.htm;
		122         }
		123     }
2)建立虚拟主机
[root@server1 conf]# mkdir /web
[root@server1 conf]# vim /web/index.html
	server1.westos.org			##写一个虚拟主机的发布页
3)生成证书
[root@server1 conf]# cd /etc/pki/tls/certs/
[root@server1 certs]# pwd
/etc/pki/tls/certs
[root@server1 certs]# make cert.pem 		##生成https证书
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:shaanxi
Locality Name (eg, city) [Default City]:xi'an
Organization Name (eg, company) [Default Company Ltd]:westos		##公司
Organizational Unit Name (eg, section) []:linux
Common Name (eg, your name or your server's hostname) []:server1	##hostname名
Email Address []:root@westos.org
[root@server1 certs]# ls
ca-bundle.crt  ca-bundle.trust.crt  cert.pem  make-dummy-cert  Makefile  renew-dummy-cert
4)发送证书
[root@server1 certs]# cp cert.pem /usr/local/nginx/conf/		##发送到conf下			
5)刷新nginx
[root@server1 certs]# nginx -t
[root@server1 certs]# nginx -s reload 
6)测试

真机做解析
172.25.47.1 www.westos.org
在这里插入图片描述
浏览器访问
https://www.westos.org
需要https验证
在这里插入图片描述
身份验证之后可以看到
在这里插入图片描述

四、页面重定向

重定向此处会用到rewrite重写规则,下面就rewrite规则介绍
1>作用
1.调整用户浏览的URL,看起来规范合乎开发及产品人员的需求
2.为了让搜索引擎收录网站内容,让用户体验更好 企业会将动态URL地址伪装成静态地址提供服务
3.网站更换新域名后 例如,访问京东的360buy.com会跳转到jd.com
4.根据特殊的变量、目录、客户端信息进行跳转
5.URL重写有利于网站首选域的确定,对于同一资源页面多条路径的301重定向有助于URL权重的集中
2>用法
	rewrite    <regex>    <replacement>    [flag];
	 关键字      正则        替代内容          flag标记

关键字:其中关键字error_log不能改变
正则:perl兼容正则表达式语句进行规则匹配
替代内容:将正则匹配的内容替换成replacement
flag标记:rewrite支持的flag标记

3>就flag标记进行说明
last ----->本条规则匹配完成后,继续向下匹配新的location URI规则
break ------>本条规则匹配完成即终止,不再匹配后面的任何规则
redirect ------>返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent ------>返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

例子:
rewrite ^/(.*) http://www.czlun.com/$1 permanent;

说明:

rewrite为固定关键字,表示开始进行rewrite匹配规则
regex部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址
replacement部分是http://www.czlun.com/$1 $1,是取自regex部分()里的内容。匹配成功后跳转到的URL。
flag部分 permanent表示永久301重定向标记,即跳转到新的 http://www.czlun.com/$1 地址上

		. : 匹配除换行符以外的任意字符
	    ? : 重复0次或1次 "do(es)?" do does doeses
	    + : 重复1次或更多次 "ol+" ol oll olll o
	    * : 重复0次或更多次 "ol*" o ol oll
	    \d:	 匹配数字
	    ^ : 匹配字符串的开始
	    $ : 匹配字符串的结束
	    {n} : 重复n次
	    {n,} : 重复n次或更多次
	    [c] :   匹配单个字符c
	    [a-z] : 匹配a-z小写字母的任意一个

1、临时重定向

http://www.westos.org重定向到 https://www.westos.org

1)修改配置文件
		[root@server1 conf]# vim nginx.conf
			106     server {
			107         listen       443 ssl;
			108         server_name  localhost;
			109 
			110         ssl_certificate      cert.pem;
			111         ssl_certificate_key  cert.pem;
			112 
			113         ssl_session_cache    shared:SSL:1m;
			114         ssl_session_timeout  5m;
			115 
			116         ssl_ciphers  HIGH:!aNULL:!MD5;
			117         ssl_prefer_server_ciphers  on;
			118 
			119         location / {
			120             root   /web;
			121             index  index.html index.htm;
			122         }
			123     }
			124         server {
			125                 listen 80;
			126                 server_name www.westos.org;
			127                 rewrite ^/(.*)$ https://www.westos.org/$1;	##
			128 }
			root@server1 conf]# nginx -t
			[root@server1 conf]# nginx -s reload
2)测试

真机浏览器 www.westos.org 可以看到server1.westos.org
在这里插入图片描述

[root@foundation47 ~]# curl -I www.westos.org
HTTP/1.1 302 Moved Temporarily		##可以看到重定向
Server: nginx/
Date: Wed, 24 Apr 2019 11:12:38 GMT
Content-Type: text/html
Content-Length: 139
Connection: keep-alive
Location: https://www.westos.org/

在这里插入图片描述

2、永久重定向

永久重定向与临时重定向配置基本相同,此处永久重定向基于临时重定向进行修改

1)修改配置文件
[root@server1 conf]# vim nginx.conf
	127                 rewrite ^/(.*)$ https://www.westos.org/$1 permanent;	##加permanent表示永久重定向
	[root@server1 conf]# nginx -t
	[root@server1 conf]# nginx -s reload
2)测试

物理真机执行命令curl -I www.westos.org
如下图,可以看到永久重定向301
在这里插入图片描述

3、重定向到其他网页

访问www.westos.org/bbs 定向到–>https://bbs.westos.org/index.html

1)配置
[root@server1 conf]# vim nginx.conf

				106     server {
				107         listen       443 ssl;
				108         server_name  www.westos.org bbs.westos.org;
				109 
				110         ssl_certificate      cert.pem;
				111         ssl_certificate_key  cert.pem;
				112 
				113         ssl_session_cache    shared:SSL:1m;
				114         ssl_session_timeout  5m;
				115 
				116         ssl_ciphers  HIGH:!aNULL:!MD5;
				117         ssl_prefer_server_ciphers  on;
				118 
				119         location / {
				120             root   /bbs;
				121             index  index.html index.htm;
				122         }
				123     }
				124         server {
				125                 listen 80;
				126                 server_name www.westos.org;
				127                 #rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
				128                 rewrite ^/bbs$ https://bbs.westos.org/index.html permanent;	##以bbs结尾就转到https://bbs.westos.org/index.html
				129 }

[root@server1 conf]# nginx -t
2)建立虚拟主机
[root@server1 conf]# mkdir /bbs
[root@server1 conf]# vim /bbs/index.html
<h1>bbs.westos.org</h1>
[root@server1 conf]# nginx -s reload
3)测试
真机解析
172.25.47.1 www.westos.org bbs.westos.org

浏览器 www.westos.org/bbs
可以看到bbs的虚拟主机发布页面

在这里插入图片描述
[root@foundation47 ~]# curl -I www.westos.org/bbs ##可以看到被重定向到bbs网页
HTTP/1.1 301 Moved Permanently
Server: nginx/
Date: Wed, 24 Apr 2019 13:52:41 GMT
Content-Type: text/html
Content-Length: 163
Connection: keep-alive
Location: https://bbs.westos.org/index.html

4、访问不同主机名返回不同信息

1)配置
[root@server1 conf]# vim nginx.conf

124         server {
125                 listen 80;
126                 server_name www.westos.org bbs.westos.org;
127                 #rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
128                 #rewrite ^/bbs$ https://bbs.westos.org/index.html permanent;
129                 if ($host = "bbs.westos.org"){
130                         rewrite ^(/.*)$ http://www.westos.org/bbs/$1 permanent;	##访问含有bbs时就调转
131 }
132         location / {
133         root /web;
134         index index.html;
135 }
136 }
[root@server1 conf]# nginx -t
[root@server1 conf]# nginx -s reload
[root@server1 web]# cp -r /bbs/ .
[root@server1 web]# ls
bbs  index.html
2)测试

访问
真机
http://www.westos.org/
看到server1.westos.org 看到的是自己
在这里插入图片描述
在这里插入图片描述
访问 bbs.westos.org 调转,
看到bbs.westos.org
在这里插入图片描述在这里插入图片描述

五、盗链与反盗链

server2盗链server1

1、盗链

1) server2上做盗链配置
[root@server2 conf]# vim /usr/local/nginx/conf/nginx.conf
 20 #       upstream westos {
 21 #       server 172.25.47.1:80;   
 22 #}

118 server {
119         listen 80;
120         server_name daolian.westos.org;
121         charset utf-8;
122         location / {
123                 root /web;
124                 index index.html;
125 }
126         }
[root@server2 conf]# nginx -t
[root@server2 conf]# nginx -s reload

[root@server2 conf]# mkdir /web
[root@server2 conf]# vim /web/index.html
<html>

<body>
<br>盗链图片</br>
<img src="http://www.westos.org/vim.jpg">

</body>


</html>
2)server1
server1
	[root@server1 conf]# cd /usr/local/nginx/html/
	[root@server1 html]# ls
	50x.html  download  index.html
	[root@server1 html]# cd download/
	[root@server1 download]# ls
	vim.jpg
	[root@server1 download]# mv vim.jpg /web/
	[root@server1 download]# 
	[root@server1 conf]# vim nginx.conf
		
		124         server {
		125                 listen 80;
		126                 server_name www.westos.org bbs.westos.org;
		127                 #rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
		128                 #rewrite ^/bbs$ https://bbs.westos.org/index.html permanent;
		129 #               if ($host = "bbs.westos.org"){
		130 #                       rewrite ^(/.*)$ http://www.westos.org/bbs/$1 permanent;
		131 #}
		132         location / {
		133         root /web;
		134         index index.html;
		135 }
		136 }
	[root@server1 conf]# nginx -t
	[root@server1 conf]# nginx -s reload	
3)测试

真机解析
[root@foundation47 ~]# vim /etc/hosts
172.25.47.2 daolian.westos.org

浏览器访问
daolian.westos.org会看到图片
在这里插入图片描述

2、反盗链

1)反盗链配置
1>在server1服务器上做反盗链配置
		[root@server1 web]# vim /usr/local/nginx/conf/nginx.conf
		136 location ~* \.(gif|jpg|png|jpeg)$ {     ##~*所有
		137                 root    /web;
		138                 valid_referers none blocked www.westos.org;
		139                 if ($invalid_referer) {
		140                         return 403;
		141                 }
		142         }
		
		[root@server1 web]# nginx -t
		[root@server1 web]# nginx -s reload
2>测试

浏览器访问
daolian.westos.org不会看到图片
在这里插入图片描述

2)反盗链加个页面
server1
1>配置
		[root@server1 web]# vim /usr/local/nginx/conf/nginx.conf
		
		126                 server_name www.westos.org ;
		
		136 location ~* \.(gif|jpg|png|jpeg)$ {    				 ##~*所有
		137                 root    /web;
		138                 valid_referers none blocked www.westos.org;
		139                 if ($invalid_referer) {
		140                         #return 403;
		141                         rewrite ^/ http://bbs.westos.org/daolian.jpg;	##调转
		142                 }
		143         }
		144 }
		145 server {
		146         listen 80;
		147         server_name bbs.westos.org;
		148         location / {
		149                 root /bbs;
		150                 index index.html;
		151 }
		152 }
[root@server1 conf]# nginx -t
[root@server1 conf]# nginx -s reload		
[root@server1 web]# cd /bbs/
[root@server1 bbs]# ls
index.html
[root@server1 bbs]# pwd
/bbs
[root@server1 bbs]# ls		
hello.jpg  index.html		##添加一个图片
[root@server1 bbs]# mv hello.jpg daolian.jpg	#图片改名为daolian
2>测试

真机;浏览器访问
daolian.westos.org
不能看到盗链的图片,看到的是添加的图片
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值