怎么搭建自己的网站后台,移动端产品,网站视频上传怎么做,广西智能网站建设哪家好目录 一#xff1a;正向代理
1#xff1a;编译安装nginx
#xff08;1#xff09;安装支持软件
#xff08;2#xff09;创建运行用户、组和日志目录
#xff08;3#xff09;编译安装nginx
#xff08;4#xff09;添加nginx系统服务
2#xff1a;配置正向代…目录 一正向代理
1编译安装nginx
1安装支持软件
2创建运行用户、组和日志目录
3编译安装nginx
4添加nginx系统服务
2配置正向代理
1编辑主配置文件添加正向代理相关配置
2验证正向代理
二反向代理
1配置nginx七层代理
1环境安装
2配置nginx七层代理转发
3验证转发效果
2配置nginx四层代理
1配置四层代理
2验证四层代理
三Nginx缓存
1缓存功能的核心原理和缓存类型
2代理缓存功能设置
1反向代理配置
2设置缓存功能
3验证缓存功能
四Nginx rewrite和正则
1nginx正则
2nginx location
1location 的语法
2location 验证
3:Rewrite 一正向代理
正向代理(Forward Proxy)是一种位于客户端和原始服务器之间的代理服务器,其主要作用是将客户端的请求转发给目标服务器,并将响应返回给客户端Nginx的正向代理充当客户端的中间人,代表用户访问外部资源并隐藏真实IP。它是企业内网管控、安全审计与加速访问的核心工具。
用于场景一般是: 内网访问控制:限制员工访问特定网站(如社交媒体) 匿名访问:通过代理服务器隐藏用户真实身份。 资源缓存加速:缓存公共资源(如软件包、镜像文件)减少外网带宽消耗. 1编译安装nginx
1安装支持软件
(1)安装支持软件 Nginx的配置及运行需要pcre、zlib等软件包的支持,因此应预先安装这些软 件的开发包(devel),以便提供相应的库和头文件,确保Nginx的安装顺利完成。 [rootlocalhost ^]# dnf install -y gcc make pcre-devel z]ib-developenssl-devel perl-ExtUtils-MakeMaker git wget tar
2创建运行用户、组和日志目录
Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限,增加灵活性、降低安全风险。例如,创建一个名为nginx的用户,不建立宿主文件夹,也禁止登录到Shell环境。 [rootlocalhostuseradd -M -s /sbin/nologin nginx [rootlocalhost ^]# mkdir -p /var/log/nginx [rootlocalhost ^]# chown -R nginx:nginx/var/log/nginX
3编译安装nginx
配置Nginx的编译选项时,将安装目录设为/usr/local/nginx,运行用户和组均 设为nginx;
启用http_stub_status_module模块以支持状态统计,便于查看服务器的连接 信息。具体选项根据实际需要来定,配置前可参考./configure--help给出的说明。 [rootlocalhost]# tar zxf nginx-1.26.3_http_proxy.tar.gz [rootlocalhost~]# cd nginx-1.26.3 [rootlocalhost ]# git clone https://github.com/chobits/ngx_http_proxy_connect_module.git#(默认nginx不支持转发https)下载第三方模块,用以支持正向代理https发,提供的源码目录已提前放置该模块,这里无需下载,仅作为介绍 [rootlocalhost nginx-1.26.3]#./configure --prefix/usr/local/nginx --usernginx --groupnginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_staticmodule --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module --with-http_gzip_static_module --add-module./ngx_http_proxy_connect_module [rootlocalhost nginx-1.26.3]# make make install
参数说明: #指定nginx运行用户 --usernginx #指定nginx运行组 --groupnginx #支持https:// --with-http_ssl_module #支持http版本2 --with-http_v2_module #支持ip透传 --with-http_realip_module #支持状态页面 --with-http_stub_status_module #支持压缩 --with-http_gzip_static_module #支持正则 --with-pcre #支持tcp反向代理 --with-stream #支持tcp的ssl加密 --with-stream_ssl_module #支持tcp的透传ip --with-stream_realip_module --add-module./ngx_http_proxy_connect_module #支持https转发默认nginx不支持https转发,需要添加第三方模块
为了使Nginx服务器的运行更加方便,可以为主程序nginx创建链接文件,以便管理员直接执行nginx命令就可以调用 Nginx的主利星序。 [rootlocalhost nginx-1.26.3]# 1n -s /usr/local/nginx/sbin/nginx/usr/local/sbin/
4添加nginx系统服务
为了使Nginx服务的启动、停止、重载等操作更加方便,可以编写Nginx朋务脚本,并使用chkconfig和systemctl工具来进行管理。 [rootlocalhost ^]# vi /lib/systemd/system/nginx. service [Unit] DescriptionThe NGINX HTTP and reverse proxy servver Afternetwork.target [Service] Typeforking PIDFile/usr/local/nginx/logs/nginx.pid ExecStartPre/usr/local/sbin/nginx -t ExecStart/usr/local/sbin/nginx ExecReload/usr/local/sbin/nginx -s reload ExecStop/bin/kill -s QUIT $MAINPID TimeoutStopSec5 KillModeprocess PrivateTmptrue Userroot Grouproot [Install] WantedBymulti-user.target [rootlocalhost ^]# systemctl daemon-reload [rootlocalhost^]# systemctl start nginx [rootlocalhost ^]# systemctl enable nginx
2配置正向代理
1编辑主配置文件添加正向代理相关配置 [rootlocalhost ^]# vi /usr/local/nginx/conf/nginx.cont server { listen 8080; #代理监听端口 server_name proxy.example.com; #解析域名使用的DNS resolver 8.8.8.8 1.1.1.1; #多个DNS用空格分隔 #启用代理CONNECT方法(支持HTTPS) proxy_connect; proxy_connect_allow 443 80; #允许代理到80和443端口 proxy_connect_connect_timeout 10s; proxy_connect_read_timeout 10s; proxy_connect_send_timeout 10s; #处理HTTP/HTTPS请求 location / { proxy_pass $scheme://shttp_host$request_uri; #动态协议 proxy_set_header Host $http_host; #优化缓冲区 proxy_buffers 256 4k; proxy_max_temp_file_size 0; #保持连接 proxy_http_version 1.1; proxy_set_header Connection } } [rootlocalhost ~]#nginx -t [rootlocalhost ^]#nginx -s reload 2验证正向代理
Linux中验证,使用curl命令,并指定代理服务器进行访问测试 [rootlocalhost ^]curl -x http://192.168.10.202:8080www.baidu.com
二反向代理
Nginx的七层(应用层)反向代理基于HTTP/HTTPS协议,深度解析应用层内容 (如URL、Header、Cookie),将客户端请求精准转发至后端服务器。作为企业级架构的智能调度器,它实现了负载均衡、安全隔离与与性能优化的核心能力。应用场景一般是: 负载均衡:将流量分发至多台后端服务器,避免单点故障。 动静分离:静态资源(图片、CSS/JS)由Nginx直接响应,动态请求(PHP、API)转发至Apache/Tomcat。 SSL终端:统一处理HTTPS加密/解密,降低后端服务器计算压力。 灰度发布:根据请求特征(如IP、Header)将部分流量导向新版本服务。 Nginx的四层(网络层)反向代理基于TCP/UDP协议,直接转发原始数据流,不解析应用层内容。它专为高性能、低延迟的传输层场景设计,是数据库、游戏服务器等非HTTP服务的理想选择。应用场景一般是: 数据库代理:对外暴露统一端口,内部转发至MySQL、Redis集群。 游戏服务器:代理UDP协议,实现实时数据包负载均衡。 SSH跳板机:通过端口映射安全访问内网服务器。 高可用服务:TCP服务(如MQTT)的主备切换与健康检查E。 反向代理,指的是浏览器/客户端并不知道自己要访问具体哪台目标服务器,只知道去访问代理服务器,代理服务器再通过反向代理负载均衡实现请求分发到应用服务器的一种代理服务。 反向代理服务的特点是代理服务器代理的对象是应用服务器,也就是对于浏览器/客户端 来说应用服务器是隐藏的。
1配置nginx七层代理
1环境安装
192.168.10.201上操作: [rootlocalhost~]#systemctl stop firewalld [rootlocalhost~]#dnf install httpd -y [rootlocalhost~]#echo这是后端主机/var/www/html/index.html [rootlocalhost~]#systemctl start httpd
2配置nginx七层代理转发 192.168.10.202上操作: [rootlocalhost^]# vi /usr/local/nginx/conf/nginx.conf http { upstream backend #后端地址池设置 server 192.168.10.201:80; #后端主机设置 } server { listen 80; server_name example.com; location/{ proxy_passhttp://backend;#动态请求转发 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location /static/ { root/data/www; #静态资源直接响应 expires 30d; #客户端缓存30天 } } } [rootlocalhost#nginx -t [rootlocalhost#nginx -s reload 上述配置中,使用upstream定义后端应用服务器的地址池backend,在location块中,使proxy_pass,转发请求至后端地址池,proxy_set_headerHost$host:将请求中的Host头部设置为客户端请求的主机名6,proxy_set_header X-Real-IP$remote_addr:将请求中的X-Real-IP头部设置为客户端的真实IP地址。
3验证转发效果
[rootlocalhost ^]# curl 192.168.10.202 这是后端主机
2配置nginx四层代理
SSH协议是基于TCP协议的,配置nginx的四层代理,实现代理ssh请求至后端服务器,用以登录内网服务器场
1配置四层代理 192.168.10.202上操作: [rootlocalhost~]#vi /usr/local/nginx/conf/nginx.conf stream { upstream ssh cluster { #定义后端地址池 server 192.168.10.201:22; #设置后端地址和服务端口 } server { listen 2222; proxy_pass ssh_cluster; proxy_connect_timeout 5s; 连接超时时间 proxy_timeout lh; 长连接保持时间 [rootlocalhost]#nginx -t [rootlocalhost^]#nginx -s reload [rootlocalhost~]#ss -nlpt | grep 2222 LISTEN O 511 0.0.0.0:2222 0.0.0.0:* users:((nginx,pid8404, fd6), (nginx,pid8403, fd6)) 2验证四层代理 [rootlocalhost ^]# ssh root192.168.10.202 -p2222 [rootlocalhost ^]#ifconfig ens33: flags4163UP, BROADCAST, RUNNING, MULTICAST mtu 1500 inet 192.168.10.201 netmask 255.255.255.0 broadcast192.168.10.255 inet6 fe80::20c:29ff:fe9f:del5 prefixlen 64 sccopeid0x20link ether 00:0c:29:9f:de:15 txqueuelen 1000 (Ethernet) RX packets 389822 bytes 511828164 (488.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 104614 bytes 8588675 (8.1 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 通过以上操作验证发现通过202的2222端口登陆后实际上是登录到201服务器上
三Nginx缓存
1缓存功能的核心原理和缓存类型 缓存类型 作用场景 代理缓存 反向代理模式下缓存后端服务器(如Tomcat、Apache)的响应内容。 FastCGI缓存 缓存PHP/Python等通过FastCGI协议处理的 动态内容 (需配FastCGI缓存合PHP-FPM使用)。 uWSGI/SCGI 缓存 类似FastCGI,用于其他后端协议。 静态资源缓存 通过expires 指令设置客户端浏览器缓存(非服务端缓存) 代理缓存 代理缓存原理: 第一步:客户端第一次向Nginx请求数据A; 第二步:当Nginx发现缓存中没有数据A时,会向服务端请求数据A; 第三步:服务端接收到Nginx发来的请求,则返回数据A到Nginx,并且缓存在Nginx; 第四步:Nginx返回数据A给客户端应用; 第五步:客户端第二次向Nginx请求数据A; 第六步:当Nginx发现缓存中存在数据A时,则不会请求服务端; 第七步:Nginx把缓存中的数据A返回给客户端应用。
2代理缓存功能设置
1反向代理配置 [rootlocalhost ^]#/usr/local/nginx/conf/nginx.conf http { upstream backend { #后端地址池设置 server 192.168.10.201:80; #后端主机设置 } server { listen 80; server_name example.com; location / { proxy_passhttp://backend; #动态请求转发 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location /static/ { root/data/www; #静态资源直接响应 expires 30d; #客户端缓存30天 } } } [rootlocalhost#nginx -t [rootlocalhost#nginx -s reload 2设置缓存功能 [rootlocalhost~]#mkdir-p/data/nginx/cache #创建缓存目录 [rootlocalhost~]#chown nginx:nginx /data/nginx/cache -R [rootlocalhost~]#vim /usr/local/nginx/conf/nginx.conf http { #定义缓存路径和参数 proxy_cache_path /data/nginx/cache levels1:2 keys_zonemy_cache:10m inactive60m_max_sizelg_use_temp_pathoff; server { listen 80; server_name example.com; location / { proxy_pass http://backend; #启用缓存区 proxy_cache my_cache; #定义缓存键(URL请求方法协议) proxy_cache_key $scheme$request_method$host$request_uri; #缓存有效期(不同状态码不同时间) proxy_cache_valid 200 302 10m; #200/302状态码缓存10分分钟 proxy_cache_valid 404 1m; #404缓存1分钟 proxy_cache_valid any 5s; #其他状态码缓存5秒 #添加缓存状态头(调试用) add_header X-Cache-Status $upstream_cache_status; } } } 关键配置解析
proxy_cache_path:定义缓存文件的存储路径 levels1:2:定义缓存目录的层级结构,levelsN:M,表示缓存文件路径的层级深度, keys_zonemy_cache:10m:定义共享内存区域,用于存储缓存键(key)和元数据(如过期时间),10m:共享内存区大小(通常每1MB可存储约8000个键 inactive60m:定义缓存内容的闲置有效期。60分钟内未被访问,将被自动删除 max_sizelg:定义缓存目录的最大磁盘空间。当缓存量i达到1GB时,Nginx启动LRU(最近最少使用)算法清理旧缓存。 use_temp_pathoff:控制临时文件的存储位置,推荐值:off(减少磁盘操作,提升性能)
3验证缓存功能 [rootlocalhost~]# curl -I 192.168.10.202 HTTP/1.1 200 OK Server: nginx/1.26.3 Date: Tue, 04 Mar 2025 12:45:44 GMT Content-Type: text/html Content-Length: 19 Connection: keep-alive Last-Modified: Mon, 03 Mar 2025 12:39:32 GMT ETag: 67c5a304-13 X-Cache-Status: MISS #MISS表示没有命中缓存 Accept-Ranges: bytes [rootlocalhost ^]# curl -I 192.168.10.202 HTTP/1.1 200 OK Server: nginx/1.26.3 Date: Tue, 04 Mar 2025 12:45:50 GMT Content-Type: text/html Content-Length: 19 Connection: keep-alive Last-Modified: Mon, 03 Mar 2025 12:39:32 GMT ETag: 67c5a304-13 X-Cache-Status:HIT #再次请求发现已经命中,说明数据已经被缓存 Accept-Ranges: bytes [rootlocalhost ^]#ls /data/nginx/cache 查看缓存目录发现已缓存数据 四Nginx rewrite和正则
1nginx正则
常用的正则表达式元字符
字符描述^匹配输入字符串的起始位置。$匹配输入字符串的结束位置。*匹配前面的字符零次或多次。匹配前面的字符一次或多次。?匹配前面的字符零次或一次。.匹配初“\n”之外的任何单个字符。\将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用\d匹配纯数字{n}重复n次{n,}重复n次或更多次[c]匹配单个字符c[a-z]匹配a-z小写字母的任意一个[a-zA-Z]匹配a-z小写字母或A-Z大写字母的任意一个
2nginx location
1location 的语法
模式说明location/uri 普通前缀匹配匹配已指定路径开头的URIlocation / 精确匹配仅匹配完全相同的URI(优先级最高)。location ~ 正则匹配区分大小写的正则表达式匹配。location ~* 正则匹配不区分大小写的正则表达式匹配。location ^ ~ 精确前缀匹配匹配前缀路径后,不再检查正则匹配(优先级高于正则location / 通用匹配认方式,优先级最低,其他方式匹配不到时匹配
location 的优先级规则: 精确匹配精确前缀匹配正则匹配(~和~*同时存在时,文件中物理位置靠上的优先)普通前缀匹配通用匹配。
2location 验证 [rootlocalhost ^]# vim /usr/local/nginx/conf/nginx.coonf location / { return200通用匹配:#其他方式匹配不到时匹配 } location /abc { return200普通前缀匹配;#uri必须是/abc开头(和精确前级四 配功能类似,但是优先级要低很多 } location ~ /test/abcdef { return200区分大小写正则;#uri中必须包含/abc } location ~ * /test/abc { return 200不区分大小写正则;#uri中必须包含/abc或/ABC location ^~ /abcdef { return 200精确前缀匹配;#uri必须是/abc开头 location /abc { return 200精确匹配;#uri必须等于/abc [rootlocalhost ^]# nginx -s reload [rootlocalhost ^]# curl 192.168.10.202/abc 精确匹配 每次请求192.168.10.202/abc后,按优先级顺序依次注释配置了文件中的location,会发现每次的响应内容发生变更了。PS:使用正则模式时,URI部分可以使用正则表达式
3:Rewrite
Rewrite语法 rewrite regexreplacement[flag]; regex:正则匹配URL字符串(只能对域名后边的除去传递的参数外的字符串起作用,例如http://www.kgc.com/index.php?idl只对/inddex.php重写)replacement:重写跳转后的地址 flag类型: last:重写后的URI会重新触发location匹配,并执行新匹配到的location块中的指令,是默认类型 break:重写后的URI不会重新匹配location,直接在当前 location中处理,且后续的指令不再执行 redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址,爬虫不会更新url(因为是临时) permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址,爬虫更新url。 在实际工作的应用中,Nginx跳转需求有三种方式可实现。i可以直接用rewrite进行匹配跳转,也可以使用 if匹配全局变量后跳转。另外,还可以使用location匹配再跳转。所以rewrite只能放在server{}、if{}、location{} 配置段中 1.server{} 块中的 rewrite 执行顺序:在请求进入server块后、匹配location前执行。 作用域:影响该server块下所有请求(全局生效)。
2.location{}块中的rewrite 执行顺序:在请求匹配到该location后执行。 作用域:仅对该location匹配的请求生效(局部生效)。 3.if{}块中的rewrite 执行顺序:在满足if条件时触发。 作用域:依赖if表达式所在的上下文(如在server中或location中)。