Nginx核心功能2
一:正向代理
正向代理(Forward Proxy)是一种位于客户端和原始服务器之间的代理服务器,其主要作用是将客户端的请求转发给目标服务器,并将响应返回给客户端Nginx的正向代理充当客户端的“中间人”,代表用户访问外部资源并隐藏真实IP。它是企业内网管控、安全审计与加速访问的核心工具。用于场景一般是:
- 内网访问控制:限制员工访问特定网站(如社交媒体)
- 匿名访问:通过代理服务器隐藏用户真实身份。
- 资源缓存加速:缓存公共资源(和软件包、镜像文件》,减少外网带宽消耗。
1.编译安装
(1)安装支持软件
在编译安装 Nginx 之前,需要安装一些必要的支持软件。以常见的 Linux 系统(如 CentOS)为例:
gcc
:GNU 编译器套件,用于编译 Nginx 的 C 代码,可通过yum install gcc
安装。pcre
(Perl Compatible Regular Expressions):Perl 兼容正则表达式库,Nginx 对 URL 等的正则匹配依赖它,安装命令为yum install pcre pcre-devel
。zlib
:用于数据压缩,Nginx 对 HTTP 响应的压缩会用到,安装指令是yum install zlib zlib-devel
。openssl
:提供加密功能,当你需要配置 HTTPS 时会用到,安装方式为yum install openssl openssl-devel
。
(2)创建运行用户,组和日志目录
为了安全和权限管理,不建议以 root 用户运行 Nginx。
- 创建用户组:
groupadd nginx
- 创建用户并加入用户组:
useradd -r -g nginx nginx
- 创建日志目录:
mkdir /var/log/nginx
- 设置目录权限:
chown -R nginx:nginx /var/log/nginx
(3)编译安装Nginx
- 下载 Nginx 源码包,可从官方网站获取。
- 解压源码包:
tar -zxvf nginx-x.x.x.tar.gz
(x.x.x
为版本号) - 进入解压后的目录:
cd nginx-x.x.x
- 配置编译选项,例如:
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_ssl_module
其中--user
和--group
指定运行 Nginx 的用户和组;--prefix
指定安装目录;--with-http_ssl_module
表示启用 HTTPS 模块。 - 编译并安装:
make
make install
(4)添加Nginx系统服务
为了方便管理 Nginx 的启动、停止和重启,可将其添加为系统服务。以 CentOS 7 为例,创建 /etc/systemd/system/nginx.service
文件,内容如下:
[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true[Install]
WantedBy=multi-user.target
2.配置正向代理
(1)编辑主文件添加正向代理相关配置:
打开 Nginx 配置文件(默认在 /usr/local/nginx/conf/nginx.conf
),在 http
块中添加如下配置示例:
http {upstream target_server {server target.example.com:80; # 目标服务器地址和端口}server {listen 8080; # 本地监听端口location / {proxy_pass http://target_server;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}
(2)验证正向代理:
配置完成后,重启 Nginx 服务。在客户端设置代理服务器为运行 Nginx 的服务器地址和监听端口(如 8080),然后访问目标服务器资源,查看 Nginx 日志(/var/log/nginx/access.log
)确认请求是否通过正向代理成功转发。
二:反向代理
反向代理是指代理服务器接受客户端请求,然后将请求转发到后端的多个服务器,并将后端服务器的响应返回给客户端,隐藏了后端服务器的真实地址
1.配置nginx七层代理
(1)环境安装
确保已安装好 Nginx 及相关依赖,安装过程同正向代理部分的编译安装步骤。
(2)配置 nginx 七层代理转发
在 Nginx 配置文件的 http
块中配置后端服务器组和代理规则,示例如下:
http {upstream backend_servers {server backend1.example.com:8080;server backend2.example.com:8080;}server {listen 80;location / {proxy_pass http://backend_servers;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}
(3)验证转发效果
重启 Nginx 服务后,通过客户端访问 Nginx 服务器的 IP 和端口,查看请求是否正确转发到后端服务器,可查看后端服务器的日志确认请求到达情况。
2.配置nginx四层代理
(1)配置四层代理
在 Nginx 配置文件中使用 stream
块进行四层代理配置,示例如下:
stream {upstream tcp_backend_servers {server backend1.example.com:3306;server backend2.example.com:3306;}server {listen 3306;proxy_pass tcp_backend_servers;}
}
(2)验证四层代理
使用客户端连接到 Nginx 服务器的四层代理端口(如 3306),检查是否能正确连接到后端服务器,可通过后端服务器的连接日志进行确认。
三:Nginx缓存
使用客户端连接到 Nginx 服务器的四层代理端口(如 3306),检查是否能正确连接到后端服务器,可通过后端服务器的连接日志进行确认。
1.缓存功能的核心原理和缓存类型
缓存功能的核心原理
Nginx 将用户请求的响应数据存储在本地缓存中,当有相同请求再次到来时,直接从缓存中返回数据,而无需再次向后端服务器请求。
缓存类型
- 代理缓存:用于代理请求时,缓存后端服务器的响应内容。
- 浏览器缓存:通过设置 HTTP 响应头(如
Cache-Control
、Expires
等),让浏览器缓存资源,减少重复请求。
2.代理缓存功能设置
(1)反向代理配置
在反向代理的基础上,添加缓存相关配置,示例如下:
http {proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;upstream backend_servers {server backend1.example.com:8080;server backend2.example.com:8080;}server {listen 80;location / {proxy_pass http://backend_servers;proxy_cache my_cache;proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;}}
}
(2)设置缓存功能
proxy_cache_path
指令定义了缓存路径、层级结构、缓存区域名称、大小、非活动缓存的过期时间等。proxy_cache
指定使用的缓存区域,proxy_cache_valid
设置不同响应状态码的缓存有效期。
(3)验证缓存功能
重启 Nginx 服务后,多次请求相同资源,查看 Nginx 日志(/var/log/nginx/access.log
)中的缓存命中情况,也可查看缓存目录下的文件变化来确认缓存是否生效。
四:Nginx rewrite和正则
1.Nginx正则
Nginx 支持 Perl 兼容正则表达式(PCRE),用于匹配 URL、请求头等字符串。常见的正则表达式元字符包括 .
(匹配任意单个字符)、*
(匹配前面的字符零次或多次)、+
(匹配前面的字符一次或多次)、^
(匹配字符串开头)、$
(匹配字符串结尾)等。
2.nginx location
(1)location 的语法
location [= | ~ | ~* | ^~] /uri/ { ... }
=
:精确匹配 URL,优先级最高。~
:区分大小写的正则匹配。~*
:不区分大小写的正则匹配。^~
:以指定字符串开头的匹配,一旦匹配成功就不再进行正则匹配。
(2)location验证
通过配置不同的 location
块,访问相应的 URL,查看 Nginx 是否按照配置的规则进行处理,可通过查看 Nginx 日志(/var/log/nginx/error.log
和 access.log
)来确认处理情况。
3.Rewrite
(1)Rewrite语法
rewrite regex replacement [flag];
regex
是用于匹配的正则表达式,replacement
是替换后的字符串,flag
是可选的标志,常见的有:
last
:停止处理当前server
块内后续的rewrite
指令,重新匹配location
。break
:停止处理当前location
内后续的rewrite
指令。redirect
:返回 302 临时重定向。permanent
:返回 301 永久重定向。
(2)rewrite flag验证
配置不同 flag
的 rewrite
指令,访问相应的 URL,查看浏览器的地址栏变化和 Nginx 的日志记录,确认 flag
是否按预期工作。
(3)rewrite 中的捕获组
在正则表达式中使用括号 ()
定义捕获组,在 replacement
中可以使用 $1
、$2
等引用捕获组的内容。例如:
rewrite ^/user/(\d+)$ /profile?id=$1 last;
(4)nginx中的set指令
set $variable value;
用于设置变量,可在 rewrite
等指令中使用设置的变量,增强配置的灵活性。例如:
set $new_uri /new_path;
rewrite ^/old_path$ $new_uri last;