NGINX配置缓存服务器

2021/9/23 linuxNginx

# 前言

最近公司使用.NET开发的站点遇到大并发访问,IIS的弱点就凸显出来,无法应对大并发访问。除了加服务器还有什么办法可以解决这个问题?动静分离,这是个很好的解决思路,但是需要修改的太多了,所以考虑使用nginx的缓存功能来给IIS服务器卸载一部分静态压力,那么如果快速搭建一个nginx的缓存服务器呢?

# 下载nginx源码并解压

# wget https://nginx.org/download/nginx-1.21.3.tar.gz

# tar -zxf nginx-1.21.3.tar.gz
1
2
3

# 使用源码安装

#./configure --prefix=/usr/local/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx.pid \
--with-http_ssl_module \
--with-http_realip_module \
--with-stream
1
2
3
4
5
6
7
8

注意安装的时候有没有报错,依照报错使用yum install安装所需的软件包即可。

# 验证是否安装成功

# nginx -V
nginx version: nginx/1.17.8
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
built with OpenSSL 1.0.2u  20 Dec 2019 (running with OpenSSL 1.0.2k-fips  26 Jan 2017)
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid --with-http_ssl_module --with-http_realip_module --with-stream 
1
2
3
4
5
6

http负载均衡需要使用cookie会话保持功能的,需要在编译安装时额外添加nginx-sticky-module-ng模块,模块下载传送门1 (opens new window)传送门2 (opens new window) 编译时添加--add-module=/nginx_patch/nginx-sticky-module-ng参数。

# 配置开机启动服务

# vim /lib/systemd/system/nginx.service
1

编辑输入

[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/usr/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target
1
2
3
4
5
6
7
8
9
10
11
12
13

启用服务

# systemctl enable nginx.service
1

启动、重启和停止nginx服务

# systemctl start nginx.service
# systemctl restart nginx.service
# systemctl stop nginx.service
1
2
3

# 服务器优化

配置/etc/sysctl.conf文件

net.core.somaxconn = 65535
net.ipv4.tcp_max_tw_buckets = 940000
net.ipv4.tcp_tw_recycle = 0
net.ipv4.ip_local_port_range = 1024 65000
1
2
3
4

修改最大文件描述符

# echo "ulimit -SHn 1024000" >> /etc/rc.d/rc.local 
# source /etc/rc.d/rc.local
1
2

# NGINX配置文件配置

# vim /etc/nginx/nginx.conf   编辑配置文件
在```http{}```模块中配置增加缓存配置
proxy_cache_path /data/nginx_cache/ levels=1:2 keys_zone=proxycache:120m inactive=24h max_size=150g;
proxy_cache_key "$host$request_uri";```server{}```模块中的```location{}```模块内配置
proxy_cache proxycache;
proxy_cache_valid any 7d;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header  X-Cache "$upstream_cache_status from $hostname";
1
2
3
4
5
6
7
8
9
10

# 检查nginx配置文件

# nginx -t
1

# 重启nginx服务

# systemctl restart nginx.service
1

# 验证缓存是否生效

使用浏览器查看文件http header,看看是否有命中提示,提示如下:

X-Cache: HIT from ngcache06
1