标签:http nginx cache Nginx 源码 yum proxy lb root
Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
在高连接并发的情况下,Nginx是Apache服务器不错的替代品。
一、yum安装nginx
1、添加nginx到yum源
[root@nginx-lb ~]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
2、安装nginx
[root@nginx-lb ~]# yum -y install nginx
3、启动nginx
[root@nginx-lb ~]# systemctl start nginx
[root@nginx-lb ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@nginx-lb ~]# systemctl status nginx
● nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2020-06-15 19:37:34 CST; 1h 21min ago
Docs: http://nginx.org/en/docs/
Main PID: 7280 (nginx)
CGroup: /system.slice/nginx.service
├─7280 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
└─7281 nginx: worker process
Jun 15 19:37:34 localhost.localdomain systemd[1]: Starting nginx - high performance web server...
Jun 15 19:37:34 localhost.localdomain systemd[1]: Started nginx - high performance web server.
[root@nginx-lb ~]# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 7280/nginx: master
4、修改节点的默认首页
[root@nginx-lb ~]# echo "<h1>nginx-web11111111</h1>" > /usr/share/nginx/html/index.html
二、源码安装nginx
1、安装前提软件环境
[root@nginx-lb ~]# yum -y install gcc gcc-c++ make libtool zlib zlib-devel pcre pcre-devel openssl openssl-devel
2、复制nginx和缓存包到/usr/src/,解压
[root@nginx-lb ~]# useradd -s /sbin/nologin nginx
[root@nginx-lb ~]# cd /usr/src
[root@nginx-lb ~]# ls
debug nginx-1.12.0.tar.gz kernels ngx_cache_purge-2.3.tar.gz nginx-goodies-nginx-sticky-module-ng-08a395c66e42.tar.gz
[root@nginx-lb ~]# tar zxf nginx-goodies-nginx-sticky-module-ng-08a395c66e42.tar.gz
[root@nginx-lb ~]# tar zxf ngx_cache_purge-2.3.tar.gz
[root@nginx-lb ~]# tar zxf nginx-1.12.0.tar.gz
3、编译安装nginx
[root@nginx-lb ~]# cd /usr/src/nginx-1.12.0
[root@nginx-lb ~]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx \
--with-http_stub_status_module --with-http_realip_module --with-http_ssl_module \
--with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client \
--http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fcgi \
--with-pcre --add-module=../ngx_cache_purge-2.3 --with-http_flv_module \
--add-module=../nginx-goodies-nginx-sticky-module-ng-08a395c66e42 \
&&make&&make install
4、添加nginx系统服务并启动
[root@nginx-lb ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@nginx-lb ~]# mkdir -p /var/tmp/nginx/client
[root@nginx-lb ~]# chown -R nginx:nginx /var/tmp/nginx
[root@nginx-lb ~]# vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: 2345 99 20
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
netstat -anplt |grep ":80" &> /dev/null && pgrep "nginx" &> /dev/null
if [ $? -eq 0 ]
then
echo "Nginx service already running."
else
$PROG -t &> /dev/null
if [ $? -eq 0 ] ; then
$PROG
echo "Nginx service start success."
else
$PROG -t
fi
fi
;;
stop)
netstat -anplt |grep ":80" &> /dev/null && pgrep "nginx" &> /dev/null
if [ $? -eq 0 ]
then
kill -s QUIT $(cat $PIDF)
echo "Nginx service stop success."
else
echo "Nginx service already stop"
fi
;;
restart)
$0 stop
$0 start
;;
status)
netstat -anplt |grep ":80" &> /dev/null && pgrep "nginx" &> /dev/null
if [ $? -eq 0 ]
then
echo "Nginx service is running."
else
echo "Nginx is stop."
fi
;;
reload)
netstat -anplt |grep ":80" &> /dev/null && pgrep "nginx" &> /dev/null
if [ $? -eq 0 ]
then
$PROG -t &> /dev/null
if [ $? -eq 0 ] ; then
kill -s HUP $(cat $PIDF)
echo "reload Nginx config success."
else
$PROG -t
fi
else
echo "Nginx service is not run."
fi
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
[root@nginx-lb ~]# chmod +x /etc/init.d/nginx
[root@nginx-lb ~]# chkconfig --add nginx
[root@nginx-lb ~]# chkconfig nginx on
[root@nginx-lb ~]# systemctl start nginx
5、查看版本
[root@nginx-lb ~]# nginx -v
nginx version: nginx/1.12.0
查看模块
[root@nginx-lb ~]# nginx -V
nginx version: nginx/1.12.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_realip_module --with-http_ssl_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fcgi --with-pcre --add-module=../ngx_cache_purge-2.3 --with-http_flv_module --add-module=../nginx-goodies-nginx-sticky-module-ng-08a395c66e42
三、基础配置
1、负载均衡与健康检查
严格来说, nginx 自带是没有针对负载均衡后端节点的健康检查的,但是可以通过默认自带的 ngx_http_proxy_module 模块和 ngx_http_upstream_module 模块中的相关指令来完成当后端节点出现故障时,自动切换到下一个节点来提供访问
http {
include mime.types;
default_type application/octet-stream;
upstream backend {
sticky;
server 192.168.1.11:80 weight=1 max_fails=2 fail_timeout=10s;
server 192.168.1.138:80 weight=1 max_fails=2 fail_timeout=10s;
}
……
}
注释:
weight : 轮询权值也是可以用在 ip_hash 的,默认值为 1
max_fails : 允许请求失败的次数,默认为 1。当超过最大次数时,返回 proxy_next_upstream模块定义的错误。
fail_timeout : 有两层含义,一是在 10s 时间内最多容许 2 次失败;二是在经历了 2 次失败以后, 10s 时间内不分配请求到这台服务器。
server {
……
location / {
root html;
index index.html index.htm;
proxy_pass http://backend;
}
……
}
2、追踪客户端呢原始ip
server {
……
location / {
root html;
index index.html index.htm;
proxy_pass http://backend;
proxy_redirect off; #追踪客户端呢原始ip是否开启
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
……
}
3、启用nginx缓存
http {
……
#access_log logs/access.log main;
proxy_buffering on;
proxy_temp_path /usr/local/nginx/proxy_temp; #
proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=my-cache:100m inactive=600m max_size=2g;
……
}
server {
……
location / {
……
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_cache my-cache;
proxy_cache_valid 200 304 301 302 8h;
proxy_cache_valid 404 1m;
proxy_cache_valid any 1d;
proxy_cache_key $host$uri$is_args$args;
expires 30d;
}
……
}
注释:
proxy_buffering on; 代理的时候,开启或关闭缓冲后端服务器的响应。当开启缓冲时, nginx 尽可能快地从被代理的服务器接收响应,再将它存入缓冲区中。
proxy_temp_path : 缓存临时目录。后端的响应并不直接返回客户端,而是先写到一个临时文件中,然后被 rename 一下当做缓存放在 proxy_cache_path 。 0.8.9 版本以后允许 temp和 cache 两个目录在不同文件系统上(分区),然而为了减少性能损失还是建议把它们设成一个文件系统上。
proxy_cache_path: 设置缓存目录,目录里的文件名是 cache_key 的 MD5 值。
levels=1:2 keys_zone=my-cache:50m 表示采用 2 级目录结构, 第一层目录只有一个字符,是由 levels=1:2 设置,总共二层目录,子目录名字由二个字符组成。Web 缓存区名称为 my-cache,内存缓存空间大小为 100MB,这个缓冲 zone 可以被多次使用。文件系统上看到的缓存文件名类似于 /usr/local/nginx1.10/proxy_cache/c/29/b7f54b2df7773722d382f4809d65029c 。
inactive=600 max_size=2g 表示 600 分钟没有被访问的内容自动清除,硬盘最大缓存空间为2GB,超过这个大学将清除最近最少使用的数据。
proxy_cache : 引用前面定义的缓存区 my-cache。
proxy_cache_valid : 为不同的响应状态码设置不同的缓存时间,比如 200、 302 等正常结果可以缓存的时间长点,而 404、 500 等缓存时间设置短一些,这个时间到了文件就会过期,而不论是否刚被访问过。
proxy_cache_key : 定义如何生成缓存的键, 设置 web 缓存的 key 值, nginx 根据 key 值 md5哈希存储缓存
$upstream_cache_status这个变量来显示缓存的状态,我们可以在配置中添加一个 http 头来显示这一状态,
$upstream_cache_status 包含以下几种状态:
·MISS 未命中,请求被传送到后端
·HIT 缓存命中
·EXPIRED 缓存已经过期请求被传送到后端
·UPDATING 正在更新缓存,将使用旧的应答
·STALE 后端将得到过期的应答expires : 在响应头里设置 Expires:或 Cache-Control:max-age,返回给客户端的浏览器缓存失效时间。
标签:http,nginx,cache,Nginx,源码,yum,proxy,lb,root 来源: https://blog.csdn.net/weixin_45373345/article/details/106760140
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。