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

web架构4------(nginx常用变量,nginx中英文自动匹配,lnmp网站架构,正向代理,反向代理,负载均衡)

一.前言

本期来介绍nginx最后几个知识点,看着要说的内容很多,其实一点也不多,都是所见即所得的东西。

二.nginx常用变量

2.1 常用变量 

$args 请求中的参数,也叫查询参数,如www.123.com/1.php?a=1&b=2的$args就是a=1&b=2, 

$content_length HTTP响应信息里的"Content-Length"

$content_type HTTP响应信息里的"Content-Type",文本文件在浏览上是可以直接预览 的,就是可以直接打开

$document_root nginx虚拟主机配置文件中的root站点根目录$document_uri 当前请求中不包含指令的URI,如www.123.com/1.php?a=1&b=2的

$document_uri就是/1.php,不包含后面的参数

$host 主机头,也就是域名或者ip地址

$http_user_agent 客户端的详细信息,也就是浏览器的标识,用curl -A可以指定,比如:curl -A 'jaden/666.0' 192.168.61.139

$http_cookie 客户端的cookie信息

$limit_rate 如果nginx服务器使用limit_rate配置了显示网络速率,则会显示,如果没 有设置, 则显示0

$remote_addr 客户端的公网ip

$remote_port 客户端的port

$remote_user 如果nginx有配置认证,该变量代表客户端认证的用户名

$request_body_file 做反向代理时发给后端服务器的本地资源的名称

$request_method http请求方法,GET/POST/PUT/DELETE等

$request_filename 当前请求的资源文件的路径名称,相当于$document_root/$document_uri的组合

$request_uri 请求的链接,包括$document_uri和$args

$scheme 请求的协议,如ftp,http,https

$server_protocol 客户端请求资源使用的协议的版本,如HTTP/1.0,HTTP/1.1,HTTP/2.0等$server_addr 服务器IP地址

$server_name 服务器的主机名

$server_port 服务器的端口号

$uri 和$document_uri相同

$http_referer 客户端请求时的referer请求头键值对的值,通俗讲就是该请求是通过哪个 链接跳过来的,用curl -e可以指定

2.2 Nginx防盗链 

referer的使用场景

百度搜索--点击某个网站--收费

盗链:你自己网站视频下载地址,被别人放到他的网站上了,别人从他网站上点击你的下载链接,下载动作和 流量走的是你的服务器,他收获了人气,你损失了流量。通过referer请求头就可以防盗链。只要下载请求数 据中的referer值不是你自己网站的网址,那就不让下载。

 # 修改b网站的index.html文件:

root@web01 web]# cd two/

[root@web01 two]# ls

ceshi games icon index index0 index1 index2 index3 index4 index5 index.html youxi youxi.tar.gz

[root@web01 two]# vim index.html

# 添加如下内容:

<img src='http://a.xxx.com/images/logo.png'>

a网站防盗链

 [root@web01 conf.d]# ls

a.xxx.com.conf b.xxx.com.conf c.xxx.com.conf www.xxx.top.conf

[root@web01 conf.d]# vim a.xxx.com.conf

# 加上如下内容

        location ~* \.png$ {

                 if ( $http_referer !~* "a.xxx.com" ) { #!~* 不包含的意思

                        return 403;

                }

         }

# 并且将location中的站点根目录放到全局来

        server {

                listen         80;

                server_name a.xxx.com;

                access_log /opt/nginx/a.xxx.com_log xxx;

                # 站点根目录设置到location外面,表示所有的location的站点根目录都指向/web/one

                root /web/one;

                index index.html index.htm; location / {

                #...

                #root /web/one;

                #index index.html index.htm;

        }

         location ~* \.png$ {

                if ( $http_referer !~* "a.xxx.com" ) {

                        return 403;

                }

        }

}

重点变量:

host #http请求头的host域名

referer #从哪一个url跳转过来的

user_agent #用户的浏览器客户端信息

Connection #是否为长链接

remote_addr #客户端的

ip status #http的状态码 

三.nginx 中英文自动匹配 

这个示例我们再做一个域名,比如yuyan.com。

 # mkdir -p /html/lang/en

# mkdir -p /html/lang/cn

# cd /html/lang/en

# vim index.html # 写点英文

# cd /html/lang/cn # vim index.html # 写点汉字

# hosts文件中加入yuyan.com

server {

        listen 80;

        server_name yuyan.com;

        index index.htm index.html;

        charset utf-8;

        location / {

                if ( $http_accept_language ~* ^en ) { # 如果accept_language的值以en开头,也就是 英文,那么返回英文的站点目录,否则返回中文的站点目录,而且有时候会根据ip地址来返回不同语言的网 站。

                root /html/lang/en;

        }

                root /html/lang/cn;

        }

}

chrome浏览器接受的语言的设置,在这里可以添加:

四.lnmp网站架构 

网站架构指的是一个网站的搭建环境:操作系统+软件+开发语言这么三个部分组成。而且很多情况下他 们是常用的相对比较固定的组合。软件主要指的是中间件(主要指的是web服务应用程序)+数据库。 

数据库:mysql\oracle...数据库管理工具,也叫做数据库管理系统,DBMS:database manager system

linux + nginx + mysql + php lnmp架构

linux + apache + mysql + php lamp架构

windows + apache + mysql + php wamp架构

linux + nginx + mysql + tomcat lnmt架构 ,主要是跑java语言项目的,tomcat本身也是web服务程序,但是本身效率低,可以和nginx结合一起使用

linux + nginx + mysql + uwsgi lnmu架构,主要是跑python语言项目的

我们先捋清楚lnmp架构,其他的也就都简单了。

五.正向代理 

客户端使用的代理我们一般称之为正向代理,服务端使用的代理我们一般称之为反向代理。

客户端如果使用了正向代理,那么服务端记录的是代理的ip地址,代理可以有很多层,而且很多网络是 正向代理和反向代理都存在。

我们做一个正向代理试试。

首先找一台服务器,比如我用阿里云的一台服务器作为正向代理服务器吧,安装一个centos7.8,然后安装个nginx

 # yum install nginx -y

# 去掉配置用的#号行和空行

[root@web01 conf.d]# grep -Ev '^$|#' /etc/nginx/nginx.conf.default >
/etc/nginx/nginx.conf

[root@web01 conf.d]# vim /etc/nginx/nginx.conf

# 修改nginx的配置分别添加http和https的server,其他配置保持不变,我们就添加个http的演示一下即可

# 将nginx.conf配置中的server部分替换为下面的server

# 下面配置正向代理转发http请求

server {

        resolver 223.5.5.5;

        listen 80;

        location / {

                proxy_pass         http://$host$request_uri;

                proxy_set_header         HOST $host;

                proxy_buffers         256 4k;

                proxy_max_temp_file_size         0k;

                proxy_connect_timeout         30;

                proxy_send_timeout         60;

                proxy_read_timeout         60;

                proxy_next_upstream error timeout invalid_header http_502;

        }

} # nginx -t

# systemctl restart nginx

# 这时候的nginx就不代表一个网站了,只是帮我们进行请求的转发,就是单纯的代理。

# 正向代理转发https请求,这个就暂时不说了

通过实时查看nginx的访问日志,可以看到Windows下设置代理IP和端口后,本地电脑访问的所有网页 会通过代理服务器进行访问网页,实现了正向代理的功能,并且隐藏了用户自己真实的IP。

六.反向代理 

反向代理更多的时候是为了保护原站,还能用于负载均衡的效果 

我们再去克隆一个虚拟机作为反向代理服务器,使用nginx作为反向代理工具,安装nginx,配置如下:

 [root@lb01 ~]# cat /etc/nginx/nginx.conf

worker_processes 1;

events {

        worker_connections 1024;

}

http {

        include         mime.types;

        default_type application/octet-stream;

        sendfile         on;

        keepalive_timeout 65;

        server {

                listen 80;

                server_name localhost;

                location / {

                        proxy_pass http://192.168.61.140; # 将请求转发到哪个ip地址,原站的ip地址,并 且其实我们正常的话是应该加一个DNS解析记录,将我们的域名指向这个代理服务器的ip地址。我们没有真实 公网主机来演示,所以改一下hosts文件的记录即可,将原来的域名都指向这个代理主机的ip地址。然后访问 网站,wireshark抓包就能看到转发效果。

                        # 如果只是单纯的配置上面这句话也可以完成反向代理,但是服务端的其他网站就没办法访问 到了,因为nginx转发的时候,会用客户端请求的服务器的ip地址,不会用域名,域名丢了,那么服务端的nginx会自动打开一个网站给你响应。所以还是要设置一下nginx转发时的host请求头,让它变成域名。

                        proxy_set_header Host $host; # 设置host,以防请求域名丢失。                                            #proxy_set_header jaden 666666; # 可以自定定制多个转发请求时的请求头键值对

                        #下面这两个主要是为了记录客户端的真实ip地址,因为有了反向代理之后,我们看到记录的 客户端的ip地址是反向代理服务器的ip地址,这样肯定不行呀,无法定位谁攻击的我,所以我们需要记录用户 的真实ip,所以就可以在nginx转发请求的时候加两个请求头键值对,将客户端真实ip写进去

                        proxy_set_header X-Real-IP $remote_addr;

                        proxy_set_header X-Forwarded-For $remote_addr; # 这个简称叫做XFF,业内一 般都用这个字段来记录客户端真实ip地址,也有用上面这个remote_addr来记录的,所以我们都配置上吧, 将nginx的日志记录格式修改一下,加上一个"真实ip:$http_x_forwarded_for"

                        #proxy_set_header X-Forwarded-For $http_x_forwarded_for;

                }

        }

}

# 后端服务器日志格式,vim /etc/nginx/nginx.conf,加上如下两条

log_format main '$remote_addr - $remote_user [$time_local] "$request" $http_host ' '

$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/new.log main; # 给所有网站定义日志格式用的

# 保存退出,然后访问网站,就看到日志了。

之前的网站服务器作为原站服务器,然后我们自己的物理机作为客户端访问。

七.负载均衡模式 

nginx做反向代理的同时,还可以配置负载均衡,为了演示负载均衡的效果,我们再创建一个web网站服 务器。而且要保证这两台web服务器跑着相同的网站。两个网站简单写一些不太一样的东西,为了是让大家看效果。

修改nginx反向代理的配置:

http {

        include mime.types;

        default_type application/octet-stream;

        sendfile         on;

        keepalive_timeout 65;

        upstream web{

                server 192.168.61.140;

                server 192.168.61.141;

        }

        server {

                listen         80;

                server_name localhost;

                location / {

                        proxy_pass http://web; # 这个地方不写死ip地址了,写个上面配置中的upstream的名称

                        proxy_set_header Host $host;

                        proxy_set_header X-Real-IP $remote_addr;

                        proxy_set_header X-Forwarded-For $http_x_forwarded_for;

                }

        }

}

八.总结 

总体来说,这些东西现在就算是记住了也会遗忘,所以我们点赞关注加收藏,遇到要用的时候再来看就好了。 

相关文章:

  • 力扣面试150题--课程表
  • 【P2P】直播网络拓扑及编码模式
  • 基于PostGIS的各地级市路网长度统计及Echarts图表可视化实践-以湖南省为例
  • Spring缓存注解的陷阱:为什么@CacheEvict删不掉Redis缓存?
  • 5G-A通感融合对监控监督体系的核心作用
  • MySQL知识回顾总结----数据库基础
  • Python 训练营打卡 Day 46
  • 跨境收单流程
  • LabVIEW Modbus 主站冗余控制
  • LabVIEW多道心电记录仪
  • el-table的select回显问题
  • 【深度学习】表示学习:深度学习的数据解构与重构艺术
  • Spring AI 项目实战(六):Spring Boot + AI + DeepSeek 打造智能成语接龙游戏(附完整源码)
  • 从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(十一)
  • 【无人机】MavLink通讯协议的回调解析函数及状态机
  • grpc和http的区别
  • HTTP 重定向详解
  • PDF 转 Word 工具 拖拽秒转可编辑文档,批量处理保留原格式
  • DeepSeek12-Open WebUI 知识库配置详细步骤
  • 【分布式】分布式ID介绍和实现方案总结
  • 烟台城乡建设住建局网站/关键词搜索趋势
  • 甘肃 政府 网站建设/电商网站建设
  • 营销型网站一站式服务/网站宣传方法
  • 上海优化网站价格/做网站优化的公司
  • 通州网站制作/吉林seo推广
  • 怎么查网站是哪家制作公司做的/建站优化公司