worker_processes 8;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#access_log logs/access.log main;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
upstream cwbase {
server 172.18.0.100:8082 weight=10 max_fails=3 fail_timeout=30s;
server 172.18.0.101:8082 weight=10 max_fails=3 fail_timeout=30s;
}
server {
listen 443 ssl;
server_name fileview.office.com;
#access_log logs/host.access.log main;
#ssl on;
ssl_certificate ../cert/fileview.office.com.crt;
ssl_certificate_key ../cert/fileview.office.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root D:\DEFPATH;
index index.html index.htm;
}
}
server {
listen 443 ssl;
server_name gsp.office.com;
#access_log logs/host.access.log main;
#ssl on;
ssl_certificate ../cert/gsp.office.com.crt;
ssl_certificate_key ../cert/gsp.office.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
add_header Cache-Control no-cache;
proxy_set_header Host gsp.brc-ulife.com;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://cwbase/;
proxy_connect_timeout 30s;
index login.aspx;
}
}
}
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器,目前中国互联网企业70%以上公司都在使用nginx作为自己的web服务器。Nginx特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
Nginx相对于Apache优点:
核心模块:HTTP模块、EVENT模块和MAIL模块
基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块,
第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块
注意:首先需要安装pcre库,安装pcre支持rewrite库,也可以安装源码,注*安装源码时,指定pcre路径为解压源码的路径,而不是编译后的路径,否则会报错。
yum install vim gcc telnet lrzsz openssl openssl-devel pcre pcre-devel
#下载Nginx源码包
wget -c http://nginx.org/download/nginx-1.9.10.tar.gz
#创建nginx用户,并且设置为不能登录
useradd -r -s /sbin/nologin nginx
#解压,进入解压目录,准备预编译,编译
tar xf nginx-1.9.10.tar.gz
cd nginx-1.9.10
#编译,预编译
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module && make && make install
#检查nginx配置文件是否正确,返回OK即正确。
/usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
#启动,检测nginx
/usr/local/nginx/sbin/nginx 或者 2 ps -ef |grep nginx
至此,nginx就搭建完了,其实nginx搭建是很简单的。
本文转自:https://www.cnblogs.com/maxtgood/p/9597990.html
1.查看nginx进程:
ps -ef|grep nginx
2.平滑启动nginx:
kill -HUP `cat /
var
/run/nginx.pid`(进程文件路径在配置文件nginx.conf中可以找到)
或者
nginx -s reload (这里的nginx命令如果没做环境变量的话那么就得输入全路径)
注意:平滑启动的意思是在不停止nginx的情况下,重启nginx,重新加载配置文件,启动新的工作线程,完美停止旧的工作线程。
3.强制停止nginx
pkill -9 nginx
4.检查对nginx.conf文件的修改是否正确
nginx -t -c /etc/nginx/nginx.conf ( /etc/nginx/nginx.conf 为自己nginx真实配置文件路径 )
或者
nginx -t(nginx为自己nginx sbin目录下的nginx可执行命令,一般没做环境变量就得写为全路径)
5.停止nginx的命令
nginx -s stop(nginx与上述意思相同)
或者
pkill nginx
6.查看nginx的版本信息
nginx -v
7.查看完整的nginx的配置信息
nginx -V
本文转自:https://www.cnblogs.com/maxtgood/p/9598333.html
nginx配置文件不算多,但是几乎每一层都有它精确的意思,所以要学习好nginx,必须先了解它的配置文件,接下来就解释一些nginx常用的一些配置文件的含义
#定义Nginx运行的用户和用户组
user www www;
#启动进程,通常设置成和cpu的数量相等
worker_processes 8;
#为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu。
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
#这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打
#开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀
#,所以最好与ulimit -n的值保持一致。
worker_rlimit_nofile 102400;
#全局错误日志及PID文件
error_log /usr/local/nginx/logs/error.log;
#错误日志定义等级,[ debug | info | notice | warn | error | crit ]
pid /usr/local/nginx/nginx.pid;
#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀.
#所以建议与ulimit -n的值保持一致。
worker_rlimit_nofile 65535;
#工作模式及连接数上限
events {
use epoll; #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
worker_connections 102400; #单个后台worker process进程的最大并发链接数 (最大连接数=连接数*进程数)
multi_accept on; #尽可能多的接受请求
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定mime类型,类型由mime.type文件定义
include mime.types;
default_type application/octet-stream;
#设定日志格式
access_log /usr/local/nginx/log/nginx/access.log;
sendfile on;
#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用必须设为 on
#如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
#autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。
tcp_nopush on; #防止网络阻塞
keepalive_timeout 60;
#keepalive超时时间,客户端到服务器端的连接持续有效时间,当出现对服务器的后,继请求时,keepalive-timeout功能可避免建立或重新建立连接。
tcp_nodelay on; #提高数据的实时响应性
#开启gzip压缩
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2; #压缩级别大小,最大为9,值越小,压缩后比例越小,CPU处理更快。
#值越大,消耗CPU比较高。
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
#设定请求缓冲
large_client_header_buffers 4 4k;
client_header_buffer_size 4k;
#客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k
#不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。
open_file_cache max=102400 inactive=20s;
#这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。
open_file_cache_valid 30s;
#这个是指多长时间检查一次缓存的有效信息。
open_file_cache_min_uses 1;
#open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive
#包含其它配置文件,如自定义的虚拟主机
include vhosts.conf;
以上为简单的nginx配置详解,根据项目需求来配置,并非所有都需要,视情况而定。
#这里为后端服务器wugk应用集群配置,根据后端实际情况修改即可,test为负载均衡名称,可以任意指定
#但必须跟vhosts.conf虚拟主机的pass段一致,否则不能转发后端的请求。weight配置权重,在fail_timeout内检查max_fails次数,失败则剔除均衡。(即可理解为负载均衡的安全检查,后面还会演示另种方法)
upstream test {
server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;
server 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=30s;
}
#虚拟主机配置
server {
#侦听80端口
listen 80;
#定义使用www.maxiaotian.com访问,前提为此域名必须解析了此主机IP。
server_name www.maxiaotian.com;
#设定本虚拟主机的访问日志
access_log logs/access.log main;
root /data/webapps/maxt; #定义服务器的默认网站根目录位置
index index.php index.html index.htm; #定义首页索引文件的名称
#默认请求
location ~ /{
root /data/www/maxt; #定义服务器的默认网站根目录位置
index index.php index.html index.htm; #定义首页索引文件的名称
#以下是一些反向代理的配置.
proxy_next_upstream http_502 http_504 error timeout invalid_header;
#如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
proxy_redirect off;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实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_pass http://tdt_wugk; #请求转向后端定义的均衡模块
}
#定义错误提示页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
#配置Nginx动静分离,定义的静态页面直接从Nginx发布目录读取。
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
root /data/www/maxt;
#expires定义用户浏览器缓存的时间为3天,如果静态页面不常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力。
expires 3d;
}
#PHP脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
location ~ \.php$ {
root /root;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www/wugk$fastcgi_script_name;
include fastcgi_params;
}
#设定查看Nginx状态的地址
location /NginxStatus {
stub_status on;
}
}
}
大概的配置文件解释就到此了,对于一些初期接触nginx的同学肯定会觉得蒙蒙的,其实很正常,很多配置可能需要结合实践项目去认识会更快,更能理解。所以后面nginx系列文档中,我也会编写一些结合项目实践的一些配置,希望能帮到大家!
本文转自:https://www.cnblogs.com/maxtgood/p/9598610.html
在真实的服务器环境,为了充分利用服务器资源,一台nginx web服务器同时会配置N个虚拟域名主机,即多个域名对于同样一个80(亦可以非常规)端口。然后服务器IP数量很多,也可以配置基于多个IP对应同一个端口。这里具体介绍两种种类,方法大概相同,实现结果不同。
方法一:
需求:同个端口,访问域名不同,访问页面不同。
vim修改nginx.conf server段配置内容如下:
server {
listen 80;
server_name www.a.com;
#access_log logs/host.access.log main;
location / {
root html/a;
index index.html index.htm;
}
server {
listen 80;
server_name www.b.com;
#access_log logs/host.access.log main;
location / {
root html/b;
index index.html index.htm;
}
解释:创建两个不同的目录mkdir –p /usr/local/nginx/html/{a,b},然后分别在两个目录创建两个不同的index.html网站页面即可。通过客户端配置hosts指向两个域名,然后在IE浏览器访问测试效果。
方法二:
需求:同个端口,访问一级域名相同,二级域名不同,访问页面不同。(根据域名后缀区分访问页面)
vim修改nginx.conf server段配置内容如下:
server {
listen 8089;
server_name sjb.suhuayue.com _;
access_log logs/host.access.log main;
error_log logs/error.log;
location / {
index index.html index.htm;
}
location ^~ /a/ {
add_header X-Frame-Options DENY;
proxy_set_header X-Client-Really-IP $remote_addr;
alias /opt/qypay/a/;
index index.html index.htm;
}
location ^~ /b/ {
add_header X-Frame-Options DENY;
alias /opt/qypay/b/;
proxy_set_header X-Client-Really-IP $remote_addr;
index index.html index.htm;
}
}
配置说明:以上配置成功后,sjb.suhuayue.com/a/为页面一,sjb.suhuayue.com/b/为页面二。
注意几点:
1 以上配置文件中alias /opt/qypay/a/;这里必须以/结尾,因为你制定的是一个目录 2 如果现实页面的时候,页面能读取到,但是显示不出来,那么就是解析问题,可配合前端进行询问前端为哪种解析。 3 访问域名的时候,如下所诉相同,域名+location关键词 访问的时候,必须以/结尾,如:http://sjb.suhuayue.com/a/是正确的。http://sjb.suhuayue.com/a为错误的。
至此,基本上多域名访问配置也解释的差不多了。
本文转自:https://www.cnblogs.com/maxtgood/p/9599068.html
注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。
nginx的强大之处不必要我细说,当初第一次接触nginx的时候就发现了它的强大之处,并且自我觉得非常有必要出一篇记录nginx的各个功能及坑点。欢迎大家对nginx感兴趣的朋友们来一起学习与及时提出错误及误点。有问题的可以在评论区@我。
其实负载均衡的意思很简单明了,网上很多原理一大堆的解释,可能看的似懂非懂。这里本人画了一个简单粗暴的原理图,仅供参考:
解释:其实nginx 作为一个轻量级、高性能的 web server 主要可以干的就两件事情,
因为nginx在处理并发方面的优势,现在这个应用非常常见。当然了Apache的 mod_proxy和mod_cache结合使用也可以实现对多台app server的反向代理和负载均衡,但是在并发处理方面apache还是没有 nginx擅长。
这里介绍一种实践负载均衡+健康检查的方法。
直接vim /usr/local/nginx/conf/nginx.conf 修改upstream 段配置文件:
http {
include mime.types;
default_type application/octet-stream;
log_format main
'$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
sendfile on;
keepalive_timeout 65;
upstream worldcup {
server 10.124.25.28:8001;
server 10.124.25.29:8001;
}
Nginx配置文件详解的时候也提到了,注意upstream后面接的关键词,如果需要单台,同端口负载不同请求的时候,需要制定不同upstream,以下提供一个实践实例。
实践示例,仅供参考,不做解释:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
sendfile on;
keepalive_timeout 65;
upstream keep_one {
server 192.168.1.1:8080 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.2:8080 weight=1 max_fails=2 fail_timeout=30s;
}
upstream keep_two {
server 192.168.1.3:8081 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.4:8081 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location /one {
root html;
index index.html index.htm;
proxy_pass http://keep_one/;
proxy_set_header Host $http_host;
proxy_set_header Cookie $http_cookie;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 300m;
}
location /two {
root html;
index index.html index.htm;
proxy_pass http://keep_two/;
proxy_set_header Host $http_host;
proxy_set_header Cookie $http_cookie;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 300m;
}
}
}
提供两个负载接口,同台服务器,同个IP,同个端口。
其实以上配置文件中已经配置了健康检查的例子,以下介绍两种健康检查的方式。
方法一:
添加upstream的时候,直接ip+port后接weight=1 max_fails=2 fail_timeout=30s;
###如以下代码
upstream fastdfs_tracker {
server 192.168.1.1:8080 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.2:8080 weight=1 max_fails=2 fail_timeout=30s;
}
解释:weight为配置的权重,在fail_timeout内检查max_fails次数,失败则剔除均衡。
方法二:
添加upstream的时候,在最后一行添加
###如以下代码:
upstream test{ #负载均衡配置,默认的策略,按时间先后,有其他按ip hash,权重
server 192.168.1.1:8080;
server 192.168.1.2:8080;
server 192.168.1.3:8080;
check interval=3000 rise=2 fall=3 timeout=3000 type=http port=8080;
}
解释:# interval=3000:间隔3秒检查一次,rise=2:检查2次ok后端节点up,fall=3:三次检查失败后端节点down,timeout=3000:超时时间3秒,type=http:发http检查请求类型,port=8080检查端口,可省略,默认和server 192.168.1.1:8080中的端口一致。
至此关于nginx最常用的负载均衡+健康检查已经配置完成,后系列中还会介绍到相对常用的nginx的反向代理。
本文转自:https://www.cnblogs.com/maxtgood/p/9599335.html
这里选择一个最简单的实践需求来演示nginx的反向代理功能,具体流程如下图:
为了简单理解,画了一个最简单的图,以便理解,目的就是,当用户需要通过a服务器的nginx WEB下载后端B服务器上的文件,(有些时候生产环境上可能并不是每个服务器都可以外网访问。)
先在目标服务器配置nginx:
location ^~ /phones/ {
add_header X-Frame-Options DENY;
alias /opt/qypay/call-show-manager/phoneFile/;
proxy_set_header X-Client-Really-IP $remote_addr;
index index.html index.htm;
}
简单配置一下location下载文件就OK了。
然后在反向代理服务器配置nginx:
location /phones/ {
#192.168.11.1:80为目标服务器的Ip与nginx的端口
proxy_pass http://192.168.11.1:80;
add_header Access-Control-Allow-Origin *;
}
至此就能实现,通过访问nginx反向代理服务器而去下载目标服务器上/opt/qypay/call-show-manager/phoneFile/路径下的文件了。
本文转自:https://www.cnblogs.com/maxtgood/p/9599542.html
其实在我们日常的运维工作中,只要有线上使用过Nginx服务器的人都知道,nginx正常运行后,我们都会经常密切关注Nginx访问日志的相关情况,发现有异常的日志信息需要进行及时处理。
那么我将跟大家一起来研究和分析Nginx日志,nginx一般默认日志路径为:/usr/local/nginx/logs/access.log 和error.log文件。如下图:
Nginx日志的格式一般在nginx.conf里面配置,常见的格式配置如下:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
格式解释:
$remote_addr, $http_x_forwarded_for 记录客户端IP地址
$remote_user 记录客户端用户名称
$request 记录请求的URL和HTTP协议
$status 记录请求状态
$body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。
$bytes_sent 发送给客户端的总字节数。
$connection_requests 当前通过一个连接获得的请求数量。
$http_referer 记录从哪个页面链接访问过来的
$http_user_agent 记录客户端浏览器相关信息
$request_length 请求的长度(包括请求行,请求头和请求正文)。
$request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
那么一般Nginx日志分析需求有如下几点:
1) 分析截止目前为止访问量最高的IP排行。
2) 找到当前日志中502或者404错误的页面并统计。
当然还有很多需求,只要你搞清楚了日志的格式与由来,并且有shell或者python基础的话,相信都不是问题的。
Nginx 是一个非常轻量的 Web 服务器,体积小、性能高、速度快等诸多优点。但不足的是也存在缺点,比如在产生的访问日志文件一直就是一个,不会自动地进行切割,如果访问量很大的话,将会导致日志文件容量非常大,不便于管理。当然了,我们也不希望看到这么庞大的一个访问日志文件,那需要手动对这个文件进行切割。那么这里就自然而然用到了shell+crontab 命令了。(当然是用python也是可以的)
脚本的功能,就是定时切割日志,这里切割的方法我们直接使用mv即可。
Nginx日志切割脚本,如下:
#!/bin/bash
#auto mv nginx log shell
#by author wugk
S_LOG=/usr/local/nginx/logs/access.log
D_LOG=/data/backup/`date +%Y%m%d`
echo -e "\033[32mPlease wait start cut shell scripts...\033[1m"
sleep 2
if [ ! -d $D_LOG ];then
mkdir -p $D_LOG
fi
mv $S_LOG $D_LOG
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
echo "-------------------------------------------"
echo "The Nginx log Cutting Successfully!"
echo "You can access backup nginx log $D_LOG/access.log files."
最后在crontab中添加如下代码即可,每天晚上自动去切割日志:
0 0 * * * /bin/sh /data/sh/auto_nginx_log.sh >>/tmp/nginx_cut.log 2>&1
本文转自:https://www.cnblogs.com/maxtgood/p/9599752.html
在我们日常使用中,Nginx经常会遇到很多问题,直接反馈在用户端的错误代码就是200、301、302、304、400、404、499、500、502、503、504等,请看如下解决方法:
注意:一般400代表网站服务未启动,404表示某个页面不存在,这两个错误代码都是比较简单,其他代码看如下
1) 502/503/504错误解决方法:
有时候访问会出现“502 Bad Gateway” 解决办法如下:
查看当前的PHP FastCGI进程数:
netstat -an | grep "php-cgi" | wc -l
如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,
那么,说明“FastCGI进程数”不够用,需要增大。
部分PHP程序的执行时间超过了Nginx的等待时间也会出现502的错误代码,可以适当增加nginx.conf配置文件中FastCGI的timeout时间,例如:
http {
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
}
如果是JAVA后端,Nginx返回502、503错误一般解决方法如下:
通过单个IP+端口去访问后端具体的实例,检查实例是否正常提供服务,一般nginx 502大都是因为后端实例或者数据库压力大,无法响应导致的。
2) Nginx 499问题解决方法:
http 499错误代码的原因,是nginx内置的安全策略会将同一个ip post过来的并发过多的请求直接给中断掉。
在nginx.conf配置文件中加入了以下配置:
proxy_ignore_client_abort on;
结果没有499错误了,但是网站还是有无法访问的情况,最后查询到还是由于访问量大造成的。解决的办法就是增加后端实例,或者nginx实例数。
本文仅列出一些个别问题案例,解决方法仅供参考
本文转自:https://www.cnblogs.com/maxtgood/p/9598113.html
因为本人碰见过自己线上业务使用检测软件对web URL进行检测的时候,提示存在安全隐患,并且详情为“空指针间接引用漏洞出现个数超出,resolver存在释放后重利用漏洞。远程攻击者通过CNAME响应处理相关的构造的DNS响应,可造成worker进程崩溃,拒绝服务等异常
解决方法:其实解决办法很简单,就是本人之前搭建版本为nginx1.8.1,那么把nginx版本升级一下即可以避免。本文主要讲解怎么样进行nginx在线升级。
#首先下载nginx最新软件包,这里我下载了nginx1.12.2版本
wget http:
//nginx.org/en/download.html/nginx-1.12.2
#查看当前nginx版本号
1 cd /usr/local/nginx/ (进入自己nginx的安装目录)
2 sbin/nginx -V (查看版本号)
nginx version: nginx/1.9.4
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
#解压新下载的软件包,并且进入到解压目录下
1 tar xf nginx-1.12.2.tar.gz
2 cd nginx-1.12.2
#接下来编译
1 ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module(以上面显示参数为准)
#make
1 make (注意,不需要make install,不然一些配置文件都会更新)
#更改老版本的nginx可执行文件
1 mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old ###把老版本的nginx更名
2 cp nginx /usr/local/nginx/sbin/nginx ###拷贝新的nginx文件过去
#进入nginx安装目录,测试查看nginx版本号
cd /usr/local/nginx
sbin/nginx -t
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/nginx/conf/nginx.conf test is successful
#让nginx把nginx.pid改成nginx.pid.oldbin 跟着启动新的nginx
1 kill -USR2 `cat /usr/local/nginx/nginx.pid`
2 kill -QUIT `cat /usr/local/nginx/nginx.pid.oldbin`
3 (/usr/local/nginx/sbin/nginx -s reload 就可以)
1 /usr/local/nginx/sbin/nginx -s stop
2 /usr/local/nginx/sbin/nginx
注意:nginx重启分两种,一种平滑重启,一种直接重启
#重启过后查看最新版本
1 sbin/nginx -V
至此,nginx升级完成。
不平凡的生活才叫人生,永远相信1+1>1 的定律! !!! ---maxt
user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /usr/local/nginx/logs/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#access_log logs/access.log main;
client_max_body_size 20m;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
proxy_cache_path ./web_cache levels=1:2 keys_zone=web_cache:1024m inactive=1000m max_size=1g;
upstream cwbase {
server 127.0.0.1:32787 weight=10 max_fails=3 fail_timeout=30s;
server 127.0.0.1:32788 weight=10 max_fails=3 fail_timeout=30s;
server 127.0.0.1:32789 weight=10 max_fails=3 fail_timeout=30s;
server 127.0.0.1:32790 weight=10 max_fails=3 fail_timeout=30s;
server 127.0.0.1:32791 weight=10 max_fails=3 fail_timeout=30s;
server 127.0.0.1:32792 weight=10 max_fails=3 fail_timeout=30s;
server 127.0.0.1:32793 weight=10 max_fails=3 fail_timeout=30s;
server 127.0.0.1:32794 weight=10 max_fails=3 fail_timeout=30s;
server 127.0.0.1:32795 weight=10 max_fails=3 fail_timeout=30s;
server 127.0.0.1:32796 weight=10 max_fails=3 fail_timeout=30s;
}
server {
listen 443 ssl;
server_name www.shengtai.club;
ssl_certificate /root/.caddy/acme/acme-v02.api.letsencrypt.org/sites/www.shengtai.club/www.shengtai.club.crt;
ssl_certificate_key /root/.caddy/acme/acme-v02.api.letsencrypt.org/sites/www.shengtai.club/www.shengtai.club.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
root /usr/share/nginx/html;
gzip on;
gzip_min_length 1k;
gzip_comp_level 3;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
gzip_buffers 32 4k;
gzip_http_version 1.0;
location ^~ /api {
rewrite ^/(.*) /$1 break;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'OPTION, POST, GET, DELETE, PUT';
add_header 'Access-Control-Allow-Headers' 'X-Requested-With, Content-Type';
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://cwbase/;
}
location ^~ /apis/ {
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'OPTION, POST, GET, DELETE, PUT';
add_header 'Access-Control-Allow-Headers' 'X-Requested-With, Content-Type';
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://cwbase/api/;
}
location ^~ /jeecg-boot {
proxy_pass http://172.18.231.224:8080/jeecg-boot/;
proxy_set_header Host 172.18.231.224;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ^~ /jeecg-boot/sys/common/view {
alias /root/jeecg/upFiles/;
index index.html index.htm;
}
location ^~ /jenkins {
proxy_pass http://172.18.231.224:8080/jenkins/;
proxy_set_header Host 172.18.231.224;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ^~ /files {
root /root/jeecg/upFiles/;
index index.html index.htm;
}
location / {
root /usr/share/nginx/html;
index index.html index.htm;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.html?s=$1 last;
break;
}
proxy_cache web_cache;
proxy_cache_valid 200 206 304 301 302 10d;
proxy_cache_key $scheme$host$request_uri;
expires 30d;
}
}
}