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;

                }

        }

}

八.总结 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/83403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openeuler系统(CentOs)图形化桌面黑屏/丢失(开启VNC服务冲突)

1. VNC服务开启如下&#xff1a; https://zhuanlan.zhihu.com/p/5049263261 在centos8系统上使用tigervnc-server搭建VNC_centos8 tigervnc-server-CSDN博客 2. 上述操作完成后&#xff0c;连接VNC仍会出现黑屏&#xff0c;则需要编辑/root/.vnc/xstartup&#xff1a; [运维…

MySQL:Prepared Statement 预处理语句

预处理语句&#xff08;Prepared Statements&#xff09;是 MySQL 中一种用于执行 SQL 查询的高效、安全的方法。通过使用预处理语句&#xff0c;可以显著提升查询性能&#xff0c;并防止 SQL 注入攻击。本文将详细介绍 MySQL 预处理语句的概念、使用方法及其优势。 一、预处理…

EPPLUS——CAD c#读写EXCEL的第三方库

EPPLUS(可支持NET35) 在 CAD 的 C# 二次开发中&#xff0c;使用 EPPLUS 库处理 Excel 文件具有以下显著优点&#xff0c;尤其在兼容性、便捷性和性能等方面契合 CAD 项目的需求&#xff1a; 1. 跨.NET 版本兼容性强&#xff0c;适配 CAD 多环境部署 多框架支持&#xff1a;EP…

Linux知识回顾总结----进程状态

本章将会介绍进程的一些概念&#xff1a;冯诺伊曼体系结构、进程是什么&#xff0c;怎么用、怎么表现得、进程空间地址、物理地址、虚拟地址、为什么存在进程空间地址、如何感性得去理解进程空间地址、环境变量是如何使用的。 目录 1. 冯诺伊曼体系结构 1.1 是什么 1.2 结论 …

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…

Android Test3 获取的ANDROID_ID值不同

Android Test3 获取的ANDROID_ID值不同 这篇文章来说明上一篇文章中说到的一个现象&#xff1a;在同一个项目中&#xff0c;创建不同的 app module&#xff0c;运行同一段测试代码&#xff0c;获取到的 ANDROID_ID 的值不同。 我也是第一次认真研究这个现象&#xff0c;这个还…

JSON 和 LabVIEW Data Types 互相转换

使用JSONtext C:\Program Files (x86)\National Instruments\LabVIEW 2021\examples\JDP Science\JSONtext JSONtext LabVIEW Data Types.vi

docker和docker-compose的版本对应关系怎么看?

docker和docker-compose的版本对应关系怎么看&#xff1f;最近在安装这两个工具&#xff0c;像知道他们的版本对应关系&#xff0c;查了不少资料才找到。 虽然 Docker 和 Docker Compose 的版本并不严格绑定&#xff0c;但是在某些情况下&#xff0c;新版本的 Docker Compose …

邮科ODM摄像头:多维度护航高铁安全系统方案解析

‌高铁作为现代交通的重要支柱&#xff0c;其安全稳定运行依赖于高效的监控体系。摄像头系统作为高铁安全管理的“视觉感知中枢”&#xff0c;凭借多场景覆盖、智能分析以及环境适应性设计&#xff0c;在行车安全、设备维护、乘客服务等方面发挥着不可或缺的作用。本文将从技术…

盒模型小全

CSS盒子模型详解 1. 定义 CSS盒子模型是用于描述HTML元素在页面中布局和表现的核心概念之一。在CSS中&#xff0c;所有HTML元素都被视为一个矩形的盒子&#xff0c;这些盒子封装了周围的HTML元素&#xff0c;并允许在其他元素和周围元素边框之间的空间放置内容。 2. 组成部分…

自定义鼠标效果 - 浏览器扩展使用教程

自定义鼠标效果 - 浏览器扩展使用教程 这里写目录标题 自定义鼠标效果 - 浏览器扩展使用教程功能特点安装方法Chrome/Edge浏览器 使用指南1. 更改鼠标光标样式2. 启用鼠标轨迹效果3. 自定义轨迹效果点状/彩虹/渐隐轨迹&#xff1a;表情轨迹&#xff1a; 管理自定义光标支持的文…

基于SpringBoot实现的课程答疑系统设计与实现【源码+文档】

基于SpringBootVue实现的课程答疑系统采用前后端分离架构方式&#xff0c;系统设计了管理员、学生、老师三种角色&#xff0c;系统实现了用户登录与注册、个人中心、学生管理、老师管理、科目类型管理、学生问题管理、老师回答管理、老师信息管理、关注列表管理、交流区、轮播图…

御微半导体面试总结

前一阵子在公司干的难受&#xff0c;所以再合肥这边面试了几家公司&#xff0c;挑一个御微半导体来说一下吧&#xff0c;公司主要是做半导体晶元测量的&#xff0c;具体啥我也不太明白。 公司产品线多&#xff0c;每条产品线配有独立的软件、结构、光学控制等人员开发语言和框…

Android Compose 自定义圆形取色盘

val Dp.toPx: Floatget() {var scale 3f // MyApplication.context.resources.displayMetrics.apply { // scale density // }return value * scale}val colors List(360) { i ->Color.hsv(360f - i, 1f, 1f) // 360到1的所有HSV颜色 }Preview …

vscode 配置 latex

下载插件 安装插件前自行安装 texlive, 按照 https://tug.org/texlive/ 要求安装 找到 settings 打开 json 文件 在 json 文件中添加如下配置 "latex-workshop.latex.tools": [{"name": "latexmk","command": "latexmk",&qu…

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(质检)

船舶质检管理现状&#xff1a;质检环节部分依赖人工检测&#xff0c;质检员依据质量标准对产品进行抽检或全检。人工质检受质检员主观因素影响较大&#xff0c;不同质检员对标准的把握可能存在差异。 一、痛点与需求 1 Arbigtec 人工经验依赖严重&#xff1a; 质检员的检测准确…

jenkins gerrit-trigger插件配置

插件gerrit-trigger下载好之后要在Manage Jenkins -->Gerrit Trigger-->New Server 中新增Gerrit Servers 配置好保存后点击“状态”查看是否正常

ubuntu24.04下 zookeeper3.8.4 集群的配置

1、环境 1.1 三台机器网络互通&#xff0c;并做hosts解析 准备三台及以上ubuntu24.04主机&#xff08;奇数&#xff09; rootzk-node01:~# hostname zk-node01rootzk-node01:~# cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 u24-server10.0.49.215 zk-node01 10.0.4…

火山引擎 veFuser:面向扩散模型的图像与视频生成推理服务框架

资料来源&#xff1a;火山引擎-开发者社区 DiT 模型与推理挑战 近年来&#xff0c;扩散模型&#xff08;Diffusion Models&#xff09;在生成式人工智能领域取得了突破性进展&#xff0c;尤其是在图像和视频生成方面表现卓越。基于 Transformer 的扩散模型&#xff08;DiT, D…

动态多目标进化算法:VARE(Vector Autoregressive Evolution)求解DF1-DF14,提供完整MATLAB代码

一、VARE简介 VARE&#xff08;Vector Autoregressive Evolution&#xff09;算法是2023年提出的一种新型的动态多目标优化&#xff08;DMO&#xff09;算法&#xff0c;旨在有效处理随时间变化的多目标优化问题。它通过结合向量自回归&#xff08;VAR&#xff09;模型和环境感…