3、try_files的使用(页面跳转)
- 实验环境:
系统 | ip | 主机名 | ngixn版本 |
Centos7.4 | 192.168.100.202 | rzy | nginx-1.18.0 |
Centos7.4 | 192.168.100.203 | rzy02 | nginx-1.18.0 |
- 实验步骤
nginx的try_files按顺序检查文件是否存在,不存在就按照指定路径跳转
rzy配置:
******(1)使用源码包方式安装nginx(略) ******(2)修改配置文件,利用$uri进行本地页面跳转 [root@rzy ~]# vim /usr/local/nginx/conf/nginx.conf 。。。。。。 #修改文件,删除多余注释 35 server { 36 listen 80; 37 server_name localhost; 38 root html; 39 index index.html ; 40 location / { 41 try_files $uri $uri/ /aaa/index.html; #uri判断默认目录下也就是访问的指定目录下有没有index.html文件的存在,存在则显示,不存在则通过$uri/重定向到/aaa/index.html,输出index.html的内容,这里的location是/默认匹配,即不管后面访问什么资源都进行跳转 42 } 43 error_page 500 502 503 504 /50x.html; 44 location = /50x.html { 45 root html; 46 } 47 } 。。。。。。 #保存退出 [root@rzy ~]# cd /usr/local/nginx/html/ #进入默认的网页目录 [root@rzy html]# ll 总用量 8 -rw-r--r-- 1 root root 494 4月 21 00:03 50x.html -rw-r--r-- 1 root root 612 4月 21 00:03 index.html [root@rzy html]# echo "aaaaaaaaa" > index.html #重新写一个页面 [root@rzy html]# /usr/local/nginx/sbin/nginx #启动nginx [root@rzy html]# curl 127.0.0.1 #访问本地测试是否可以正常访问 aaaaaaaaa [root@rzy html]# mkdir aaa #在当前html目录下创建aaa目录 [root@rzy html]# echo "bbbbbbbbbb" > aaa/index.html #在aaa目录写一个页面 [root@rzy html]# rm -rf index.html #删除当前html目录的index.html页面 [root@rzy html]# curl 127.0.0.1/afsdf #进行测试,发现就算不是访问aaa目录也能跳转到aaa目录的页面 bbbbbbbbbb ******(3)再次修改配置文件,利用porxy_pass和$uri进行网页跳转 [root@rzy html]# vim /usr/local/nginx/conf/nginx.conf 。。。。。。 35 server { 36 listen 80; 37 server_name localhost; 38 root html; 39 index index.html ; 40 location / { 41 try_files $uri @java_page; #配置眺转,这个@后面的字符只要跟下面的location匹配就行 42 } 43 location @java_page{ 44 proxy_pass http://192.168.100.203; #配置跳转的java_page是http://192.168.100.203 45 } 46 error_page 500 502 503 504 /50x.html; 47 location = /50x.html { 48 root html; 49 } 。。。。。。 #保存退出 [root@rzy html]# curl 127.0.0.1 #先进行访问 aaaaaaa [root@rzy html]# ll 总用量 8 -rw-r--r-- 1 root root 494 4月 21 00:03 50x.html drwxr-xr-x 2 root root 24 4月 21 00:08 aaa -rw-r--r-- 1 root root 8 4月 21 00:10 index.html [root@rzy html]# rm -rf index.html #删除index.html [root@rzy html]# killall -9 nginx #关闭nginx [root@rzy html]# /usr/local/nginx/sbin/nginx #开启nginx使配置文件生效 [root@rzy html]# curl 127.0.0.1 #再次访问本地,发现访问的是192.168.100.203的页面,说明成功跳转 rzy-02
rzy02配置:
******(1)使用源码包方式安装nginx(略) ******(2)配置网页开启Nginx即可 [root@rzy02 ~]# echo "rzy-02" > /usr/local/nginx/html/index.html [root@rzy02 ~]# /usr/local/nginx/sbin/nginx [root@rzy02 ~]# curl 127.0.0.1 rzy-02
4、alias与root的区别
- 实验环境:
系统 | ip | 主机名 | ngixn版本 |
Centos7.4 | 192.168.100.202 | rzy | nginx-1.18.0 |
- 实验步骤
******(1)使用源码包方式安装nginx ******(2)修改配置文件,root的作用 [root@rzy ~]# vim /usr/local/nginx/conf/nginx.conf 。。。。。。 35 server { 36 listen 80; 37 server_name localhost; 38 location /bbb/aaa { #指定访问的资源,即用户访问服务器下的/bbb/aaa时,实际显示的时/html/bbb/aaa下的index,html 39 root html; #root只能写一个,location写了server就不能写了 40 index index.html; 41 } 42 } 43 } 。。。。。。 #保存退出 [root@rzy ~]# cd /usr/local/nginx/html/ [root@rzy html]# mkdir -p bbb/aaa [root@rzy html]# mkdir -p bbb/aaa [root@rzy html]# echo "aaaaaa" > bbb/aaa/index.html [root@rzy html]# curl http://192.168.100.202/bbb/aaa/ aaaaaa #实际访问的是/html/bbb/aaa/index.html ******(3)修改配置文件,alias的作用 [root@rzy html]# vim /usr/local/nginx/conf/nginx.conf 。。。。。。 35 server { 36 listen 80; 37 server_name localhost; 38 location /bbb/aaa { #访问/bbb/aaa/时会跳转 39 alias html; #root修改为alias,会直接跳转 40 index index.html; 41 } 42 } 。。。。。。 #保存退出 [root@rzy html]# echo "111111" > index.html [root@rzy html]# killall -9 nginx [root@rzy html]# /usr/local/nginx/sbin/nginx [root@rzy html]# curl http://192.168.100.202/bbb/aaa/ #再次访问发现直接跳转了 111111 ******(4)alias和root的区别 root指定路径例如: location /bbb/aaa { root html; index index.html; } location指定资源,即用户访问这个资源的时候location中的配置才会生效,location / 默认匹配则全部生效 这里的配置,即用户访问/bbb/aaa/资源时,location中的配置生效,root其实就是又加了一个根路径。用户实际访问变成了/html/bbb/aaa/下的资源 alias指定路径例如: location /bbb/aaa { alias html; index index.html; } 这里的location和上面的相同。都是用户访问/bbb/aaa的资源才会生效 alias在用户界面的命令中就是别名的意思,在这里也一样的,用户实际访问直接变成了/html/下的资源
5、获取用户真实ip
- 实验环境:
系统 | ip | 主机名 | ngixn版本 |
Centos7.4 | 192.168.100.202 | rzy | nginx-1.18.0 |
Centos7.4 | 192.168.100.203 | rzy02 | nginx-1.18,0 |
- 实验步骤
rzy配置
******(1)使用源码包方式安装nginx(略) ******(2)修改配置文件 [root@rzy html]# vim /usr/local/nginx/conf/nginx.conf 。。。。。。 35 server { 36 listen 80; 37 server_name localhost; 38 root html; 39 index index.html ; 40 location / { 41 try_files $uri @aaa; #配置网页调转 42 } 43 location @aaa { 44 proxy_pass http://192.168.100.203; #跳转到100.203 45 } 46 } 47 } 。。。。。。 #保存退出 [root@rzy html]# killall -9 nginx [root@rzy html]# /usr/local/nginx/sbin/nginx #重启
rzy02配置
******(1)使用源码包方式安装nginx(略) ******(2)配置网页目录和开启 Nginx即可 [root@rzy02 ~]# echo "rzy-02" > /usr/local/nginx/html/index.html [root@rzy02 ~]# /usr/local/nginx/sbin/nginx [root@rzy02 ~]# curl 127.0.0.1 rzy-02
先使用本机浏览器访问,发现可以成功眺转
******(1)分别查看两台服务器的nginx访问日志 rzy: [root@rzy html]# tail -1 /usr/local/nginx/logs/access.log 192.168.100.230 - - [21/Apr/2021:01:13:50 +0800] "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.100.202/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400" #可以发现是100.230访问了rzy rzy02: [root@rzy02 ~]# tail -1 /usr/local/nginx/logs/access.log 192.168.100.202 - - [21/Apr/2021:00:42:48 +0800] "GET /favicon.ico HTTP/1.0" 404 555 "http://192.168.100.202/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400" #但是在rzy02只看到是rzy访问了,看不到是谁真正的访问了它 ******(2)配置rzy来使rzy02可以看到真正访问它的ip地址 [root@rzy html]# vim /usr/local/nginx/conf/nginx.conf 。。。。。。 35 server { 36 listen 80; 37 server_name localhost; 38 root html; 39 index index.html ; 40 location / { 41 try_files $uri @aaa; 42 } 43 location @aaa { 44 proxy_pass http://192.168.100.203; 45 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #添加这段配置 46 } 47 } 48 } 。。。。。。 #保存退出 [root@rzy html]# killall -9 nginx [root@rzy html]# /usr/local/nginx/sbin/nginx #重新启动nginx ******(3)再次使用本机的浏览器访问rzy,然后查看日志 rzy: [root@rzy html]# tail -1 /usr/local/nginx/logs/access.log 192.168.100.230 - - [21/Apr/2021:01:19:46 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400" rzy02: [root@rzy02 ~]# vim /usr/local/nginx/conf/nginx.conf 。。。。。。 21 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' #把这三行去掉注释,让配置项生效 22 '$status $body_bytes_sent "$http_referer" ' 23 '"$http_user_agent" "$http_x_forwarded_for"'; 24 。。。。。。 #保存退出 [root@rzy02 ~]# killall -9 nginx [root@rzy02 ~]# /usr/local/nginx/sbin/nginx #重启服务 [root@rzy02 ~]# > /usr/local/nginx/logs/access.log #清空日志 [root@rzy02 ~]# tail -f /usr/local/nginx/logs/access.log #tail -f 即实时查看 192.168.100.202 - - [21/Apr/2021:00:54:14 +0800] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400" "192.168.100.230" #发现在日志的最后增加了一个ip地址,而这个ip就是访问rzy02的真实ip
6、网站访问原理
- DNS流程,即解析域名
- 先查询本地hosts文件
- 请求本地localDNS
- 返回对应的IP地址
- HTTP连接
1.首先先建立TCP连接,即TCP的三次握手,发送请求内容、请求起始行、请求头部、请求的主体
将请求传递给负载均衡,通过负载均衡做出相应的请求调度
如果请求的是静态页面,那么会将请求调度到对应的静态集群解析
如果请求的是动态页面,那么会将请求调度到对应的动态集群解析
如果仅仅是请求页面,那么可以会通过Opcache
2.如果请求的页面需要查询数据库,或者是往数据库输入内容,那么就需要进行检查
检查对应的操作是查询还是写入,如果是查询数据库
会检查查询的内容是否有缓存,如果有缓存则返回,没有缓存则开始从数据库查询数据
检查查询语句,将查询结果返回
3.返回对应客户端的请求内容至WEB节点
4.WEB节点收到请求后返回内容至负载均衡
5.负责均衡返回客户端内容,然后TCP连接断开,即TCP的四次断开
6.HTTP断开连接
- 按照分层结构,每一层都有其对应的缓存机制
7、Nginx优化方案总结
- Gizp压缩
- Expires静态文件缓存
- 调整网络IO模型,调整Nginx worker进程的最大连接数
- 隐藏Nginx名称和版本号
- 配置防盗链,防止资源被盗用
- 禁止通过ip地址访问,进程恶意域名解析,只允许域名访问
- 防止DDos、CC攻击,限制单ip并发请求连接
- 配置错误页面,根据错误代码指定网页反馈用户
- 限制上传资源目录被程序访问,防止木马入侵系统
- Nginx加密传输优化
接**
1.首先先建立TCP连接,即TCP的三次握手,发送请求内容、请求起始行、请求头部、请求的主体
将请求传递给负载均衡,通过负载均衡做出相应的请求调度
如果请求的是静态页面,那么会将请求调度到对应的静态集群解析
如果请求的是动态页面,那么会将请求调度到对应的动态集群解析
如果仅仅是请求页面,那么可以会通过Opcache
2.如果请求的页面需要查询数据库,或者是往数据库输入内容,那么就需要进行检查
检查对应的操作是查询还是写入,如果是查询数据库
会检查查询的内容是否有缓存,如果有缓存则返回,没有缓存则开始从数据库查询数据
检查查询语句,将查询结果返回
3.返回对应客户端的请求内容至WEB节点
4.WEB节点收到请求后返回内容至负载均衡
5.负责均衡返回客户端内容,然后TCP连接断开,即TCP的四次断开
6.HTTP断开连接
- 按照分层结构,每一层都有其对应的缓存机制
7、Nginx优化方案总结
- Gizp压缩
- Expires静态文件缓存
- 调整网络IO模型,调整Nginx worker进程的最大连接数
- 隐藏Nginx名称和版本号
- 配置防盗链,防止资源被盗用
- 禁止通过ip地址访问,进程恶意域名解析,只允许域名访问
- 防止DDos、CC攻击,限制单ip并发请求连接
- 配置错误页面,根据错误代码指定网页反馈用户
- 限制上传资源目录被程序访问,防止木马入侵系统
- Nginx加密传输优化