Nginx 错误处理方法.docx
《Nginx 错误处理方法.docx》由会员分享,可在线阅读,更多相关《Nginx 错误处理方法.docx(17页珍藏版)》请在冰豆网上搜索。
![Nginx 错误处理方法.docx](https://file1.bdocx.com/fileroot1/2023-4/20/062c7eee-7c9e-441c-bed3-6510bc5339d1/062c7eee-7c9e-441c-bed3-6510bc5339d11.gif)
Nginx错误处理方法
Nginx(“enginex”)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Nginx是由IgorSysoev为俄罗斯访问量第二的Rambler.ru站点开发的,它已经在该站点运行超过两年半了。
Igor将源代码以类BSD许可证的形式发布。
Nginx超越Apache的高性能和稳定性。
Nginx+Tomcat是目前主流的Javaweb架构,很多公司在使用,Nginx+Tomcat通过简单的配置,可以实现高性能的负载均衡,通过本文学习,可以实现Nginx+Tomcat负载均衡。
工具资源
1、Java运行环境,JDK
2、Tomcat7.0.65压缩版下载
3、Nginx1.8.1稳定版下载
本文基于win10进行配置
配置步骤
1、JDK环境配置略
2、Tomcat安装配置
请参考:
一台服务器安装运行多个Tomcat及注册服务
本测试安装两个Tomcat,端口分别是8801和8802
安装配置完成后请确保每一个Tomcat可以正常访问
为了区分两个Tomcat,本文将第二个Tomcat的页面名称改为:
ApacheTomcat/7.0.65-2
3、Nginx配置
1.解压Nginx到D盘根目录
2.修改Nginx配置
#usernobody;
worker_processes1;#工作进程的个数
#error_loglogs/error.log;
#error_loglogs/error.lognotice;
#error_loglogs/error.loginfo;
#pidlogs/nginx.pid;
events{
worker_connections1024;#单个进程最大连接数
}
http{
includemime.types;#文件扩展名与文件类型映射表
default_typeapplication/octet-stream;#默认文件类型
#access_loglogs/access.logmain;
sendfileon;#开启高效文件传输模式
#tcp_nopushon;
#keepalive_timeout0;
keepalive_timeout65;#长连接超时时间,单位是秒
#gzipon;#启用Gizp压缩
#服务器的集群
upstreamtomcatColony{#服务器集群名字
server127.0.0.1:
8801weight=0;
server127.0.0.1:
8802weight=1;
}
server{
listen8080;#监听端口,默认是80,可以修改
server_namelocalhost;#当前服务的域名
location/{
proxy_pass;#指定使用集群
proxy_redirectdefault;
}
error_page500502503504/50x.html;
location=/50x.html{
roothtml;
}
}
注意:
nginx在配置upstream时,有两个参数:
ip_hash(同一IP一直使用同一台server服务)
weight(server的使用权重,数值越大,nginx分发的请求越多)
1.启动Nginx
Nginx目录下:
D:
\nginx-1.8.1,运行nginx.exe,即可启动。
启动可查看进程
效果
访问:
,即可打开Tomcat,通过不断F5刷新,可以观察在Tomcat1、2之间切换,由于集群中Tomcat2权重配置较大,所有Tomat分配到Tomcat的几率就大一些。
Windows服务器nginx+tomcat服务负载均衡
一.安装两个tomcat服务自启动
1.解压两个tomcat,名称为分别1,2
2.配置环境变量
3.修改文件server.xml中的三个端口号,使得两个tomcat不冲突
(1)
(2)
(3)
4.修改tomcat \bin目录下的三个文件(catalina.bat、startup.bat、shutdown.bat),分别对应环境变量中的CATALINA_HOME,CATALINA_BASE
例如修改tomcat2:
(1)将catalina.bat下的%CATALINA_HOME%改为%CATALINA_HOME2%,%CATALINA_BASE%改为%CATALINA_BASE2%(可以全部替换)
(2)将startup.bat和shutdown.bat下的%CATALINA_HOME%改为%CATALINA_HOME2%
5.tomcat注册为服务
修改\bin目录下 service.bat文件
例如tomcat2:
(1)将service.bat下的%CATALINA_HOME%改为%CATALINA_HOME2%,%CATALINA_BASE%改为%CATALINA_BASE2%
(2)将默认的Servicename修改为想要的,比如Tomcat8.2(也可以注册的时候在指定名字),DISPLAYNAME是在windows服务列表显示的名称。
DOS窗口进入tomcat的bin目录并执行命令注册服务:
service.batinstallTomcat8.2(不写就是默认服务名)
表示安装成功。
服务里出现两个tomcat
6.tomcat启动关闭命令
(1)dos启动:
netstarttomcat8
(2)dos关闭:
netstoptomcat8
(3)删除服务:
service.batremove
二.nginx负载均衡
1. nginx注册成服务
2.配置nginx.conf文件
nginx的upstream默认是以轮询的方式实现负载均衡,还可以增加权重weight=1来改变轮询的几率
#gzipon;
upstreamtomcat_service{
server127.0.0.1:
8080;//如果使用localhost,请求会很慢
server127.0.0.1:
8090;
}
#upstreamtomcat_service{
#server127.0.0.1:
8080weight=1;
#server127.0.0.1:
8090weight=2;
#}
server{
listen80;
server_namelocalhost;
#charsetkoi8-r;
#access_loglogs/host.access.logmain;
location/{
proxy_pass;
proxy_redirectoff;
proxy_set_headerHost$host;
proxy_set_headerX-Real-IP$remote_addr;
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
client_max_body_size10m;
client_body_buffer_size128k;
proxy_connect_timeout100;
proxy_send_timeout100;
proxy_read_timeout100;
proxy_buffer_size4k;
proxy_buffers432k;
proxy_busy_buffers_size64k;
proxy_temp_64k;
}
三.重启nginx,把tomcat欢迎页(root/index.jsp)修改下用于区分是否访问的不同tomcat
Windows+Nginx+Tomcat整合的安装与配置学习笔记
以下全部是nginx在window7下运行的;
nginx学习总结:
我的是放在F盘
1、启动:
F:
\nginx-1.10.2\nginx-1.10.2>startnginx.exe(找到相应的路径,直接运行nginx.exe也可以)
注:
建议使用第一种,第二种会使你的cmd窗口一直处于执行中,不能进行其他命令操作。
2、停止:
F:
\nginx-1.10.2\nginx-1.10.2>nginx.exe-sstop(或者nginx.exe-squit)
注:
stop是快速停止nginx,可能并不保存相关信息;quit是完整有序的停止nginx,并保存相关信息。
3、重新载入Nginx:
F:
\nginx-1.10.2\nginx-1.10.2>ginx.exe-sreload
注:
当配置信息修改,需要重新载入这些配置时使用此命令。
4、重新打开日志文件:
F:
\nginx-1.10.2\nginx-1.10.2>nginx.exe-sreopen
5、查看Nginx版本:
F:
\nginx-1.10.2\nginx-1.10.2>nginx-v
6、测试nginx是否启动成功:
F:
\nginx-1.10.2\nginx-1.10.2>nginx-t
以上是一些经常用到的命令;
完整实例:
1、到官网下载nginx;
下载到f盘;
2.启动nginx;
3.访问页面t可以看到欢迎界面;
4.我们可以看到nginx文件夹内有一个conf文件夹,其中有好几个文件,其他先不管,我们打开nginx.conf,可以看到一段:
这段代码在server里面,相当于一个代理服务器,当然可以配置多个。
下面我们仔细来分析一下:
listen:
表示当前的代理服务器监听的端口,默认的是监听80端口。
注意,如果我们配置了多个server,这个listen要配置不一样,不然就不能确定转到哪里去了。
server_name:
表示监听到之后需要转到哪里去,这时我们直接转到本地,这时是直接到nginx文件夹内。
location:
表示匹配的路径,这时配置了/表示所有请求都被匹配到这里
root:
里面配置了root这时表示当匹配这个请求的路径时,将会在这个文件夹内寻找相应的文件,这里对我们之后的静态文件伺服很有用。
index:
当没有指定主页时,默认会选择这个指定的文件,它可以有多个,并按顺序来加载,如果第一个不存在,则找第二个,依此类推。
下面的error_page是代表错误的页面,这里我们暂时不用,先不管它。
那我们知道了具体的配置了,怎么让它访问localhost时转到tomcat时。
实际上就修改两个地方:
server_namelocalhost:
8080;
location/{
proxy_pass;
}
我们就修改了上面两个地方,我的tomcat在8080端口,可以根据自己的需要修改。
这里有一个新元素proxy_pass,它表示代理路径,相当于转发,而不像之前说的root必须指定一个文件夹。
此时我们修改了文件,是不是就意思着必须先关了nginx再重新启动了,其实不必,nginx可以重新加载文件的。
我们直接运行:
如果不想直接加载,而只是想看看自己的配置文件有没有问题,可以直接输入:
这可以检查配置文件中是否有错。
一切没问题了,然后我们再重新打开t,我们看到下面的页面:
这时,我们发现它并不是刚才的welcome页面了,而是tomcat的管理页面了,不管我们点击什么链接都是没问题的,相当于直接访问0一样。
如果想让本地的nginx转发你想要的网址,直接修改nginx.conf的proxy_pass地址就可以了;
Nginx错误处理方法:
bind()to0.0.0.0:
80failed
今天启动window上的nginx总是报错
错误信息是bind()to0.0.0.0:
80failed(10013:
Anattemptwasmadetoaccessasocketinawayforbiddenbyitsaccesspermissions)
大概意思是nginxlisten的80后端口被占用 于是XX了下查看端口的命令
运行–cmd
C:
\>netstat-aon|findstr"80"
TCP127.0.0.1:
800.0.0.0:
0LISTENING2448
端口被进程号为2448的进程占用,继续执行下面命令:
C:
\>tasklist|findstr"2448"
thread.exe2016Console016,064K
很清楚,thread占用了你的端口,Killit
如果第二步查不到,那就开任务管理器,进程—查看—选择列—pid(进程位标识符)打个勾就可以了
看哪个进程是2448,然后杀之即可。
另外,强制终止进程:
CMD命令:
taskkill/F/pid1408
其实上面我都还没解决问题最后发现有个http.d这个是apache的进程结束了这个进程nginx才启动了
如果朋友们使用的phpstudy这个集成软件,那么你在使用它的nginx的时候就要注意了,如果你的listen端口不是80,但是还是出现了上述的错误,那么你要去看看includevhost.conf里的配置
Nginx+Tomcat+HTTPS配置原来不需要在Tomcat上启用SSL支持
互联网开发模式的经验之谈>>>»
之前在网上搜索到的很多文章在描述Nginx+Tomcat启用HTTPS支持的时候,都必须在Nginx和Tomcat两边同时配置SSL支持。
但我一直在想为什么就不能按照下面的方式来配置呢?
就是Nginx上启用了HTTPS,而Nginx和Tomcat之间走的却是普通的HTTP连接。
但是搜索很多没有解决办法,最后还是老老实实的Nginx和Tomcat同时配置的SSL支持。
最近给OSChina买了个新的支持*泛域名的证书,然后我又开始偷懒的想为什么Tomcat一定要配HTTPS呢?
没道理啊。
然后潜心搜索终于找到了解决方案。
原来却是如此的简单。
最终配置的方案是浏览器和Nginx之间走的HTTPS通讯,而Nginx到Tomcat通过proxy_pass走的是普通HTTP连接。
下面是详细的配置(Nginx端口80/443,Tomcat的端口8080):
Nginx这一侧的配置没什么特别的:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
upstreamtomcat{
server127.0.0.1:
8080fail_timeout=0;
}
#HTTPSserver
server{
listen 443ssl;
server_name localhost;
ssl_certificate /Users/winterlau/Desktop/SSL/oschina.bundle.crt;
ssl_certificate_key /Users/winterlau/Desktop/SSL/oschina.key;
ssl_session_cache shared:
SSL:
1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:
!
aNULL:
!
MD5;
ssl_prefer_server_ciphers on;
location/{
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
proxy_set_headerHost$http_host;
proxy_set_headerX-Forwarded-Protohttps;
proxy_redirectoff;
proxy_connect_timeout 240;
proxy_send_timeout 240;
proxy_read_timeout 240;
#note,thereisnotSSLhere!
plainHTTPisused
proxy_pass;
}
}
其中最为关键的就是ssl_certificate和ssl_certificate_key这两项配置,其他的按正常配置。
不过多了一个proxy_set_headerX-Forwarded-Protohttps;配置。
最主要的配置来自Tomcat,下面是我测试环境中的完整server.xml:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
xmlversion='1.0'encoding='utf-8'?
>
connectionTimeout="20000"
redirectPort="443"
proxyPort="443"/>
unpackWARs="true"autoDeploy="true">
remoteIpHeader="x-forwarded-for"
remoteIpProxiesHeader="x-forwarded-by"
protocolHeader="x-forwarded-proto"
/>
上述的配置中没有什么特别的,但是特别特别注意的是必须有proxyPort="443",这是整篇文章的关键,当然redirectPort也必须是443。
同时节点的配置也非常重要,否则你在Tomcat中的应用在读取getScheme()方法以及在web.xml中配置的一些安全策略会不起作用。
怎么样,简单到一塌糊涂吧!
!
!