以下实验为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
不能看到盗链的图片,看到的是添加的图片