最近在公司工作,出现一个很奇怪的问题:网站的运行环境:resin+ningx,并且统一调用了公司的auth认证,每个用户都没有问题,新加入的实习生,却显示502网关错误。于是乎开始慢慢研究nginx。在本地(windows)下搭建了一个nginx,并且配置好:
一.nginx的简单介绍
- 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
这里讲得很直白。反向代理方式实际上就是一台负责转发的代理服务器,貌似充当了真正服务器的功能,但实际上并不是,代理服务器只是充当了转发的作用,并且从真正的服务器那里取得返回的数据。这样说,其实nginx完成的就是这样的工作。我们让nginx监听一个端口,譬如80端口,但实际上我们转发给在8080端口的tomcat,由它来处理真正的请求,当请求完成后,tomcat返回,但数据此时没直接返回,而是直接给nginx,由nginx进行返回,这里,我们会以为是nginx进行了处理,但实际上进行处理的是tomcat。
说到上面的方式,也许很多人又会想起来,这样可以把静态文件交由nginx来进行处理。对,很多用到nginx的地方都是作为静态伺服器,这样可以方便缓存那些静态文件,比如CSS,JS,html,htm等文件。
闲话就不多说了,我们直接来看看nginx怎么使用。
二.Windows下安装nginx
如果要对启动的nginx进程进行控制,可以使用一些命令:
nginx -s [stop|quit|reopen|reload]
3)nginx的配置文件在默认的conf文件下,主配置文件是nginx.conf,下面是我的配置文件:
events {
#允许的连接数
worker_connections 1024;
}
http {
#代理nginx的多台服务器
upstream sysjob {
#ip_hash每个请求按访问IP的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
ip_hash;
#server 10.127.64.192:8089;
#server 10.127.141.217:8080;
server 10.12.4.53:8080;
}
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 5m;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
proxy_buffer_size 64k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_ignore_client_abort on;
proxy_cache_path ./cache levels=1:2 keys_zone=cache_one:10m inactive=2d max_size=30G;
server {
listen 80;
server_name sysjob.cyou-inc.com;
if ($request_uri ~ " ") {
#444无响应,在nginx日志中用于表示服务器没有返回信息到客户端,并关闭了连接
return 444;
}
#允许某个IP或者某个个IP端访问
allow 10.0.0.0/8;
#处理上面allow的其他都禁止
deny all;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#
#引入某个文件
#include /usr/local/nginx/conf/proxy.conf;
#日志文件
#access_log /home/logs/nginx/sysjob.acc.log main;
#access_log D:/nginx-1.9.12/nginx-1.9.12/mylogs/sysjob.my.log main;
#nginx的gzip的压缩在默认情况下是关闭的,gzip压缩功能就是让你节省不少带宽,但是会增加服务器CPU的开销,默认只对text/html进行压缩
gzip on;
#最小压缩的页面,如果页面过于小,可能会越压越大,这里规定大于1K的才启动压缩
gzip_min_length 1k;
#设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流
gzip_buffers 8 16k;
#压缩级别,1压缩比最小处理速度最快,9压缩比最大但是处理最慢,同时也是最消耗CPU的,一般设置为3
gzip_comp_level 7;
#设置什么类型的页面或者文档启动压缩
gzip_types text/plain application/x-javascript text/css application/xml image/jpg image/gif image/png;
gzip_vary on;
#禁止用IE1-6的gzip压缩,因为IE的低版本对gzip的压缩支持很不好,会造成页面假死
gzip_disable "MSIE [1-6]\.";
#nginx 做前端代理时启动该选项,表示无论后端服务器的headers头返回什么信息,都无条件启动压缩
gzip_proxied any;
#=开头表示精确匹配,^~开头表示uri以某个常规字符串开头,不是正则匹配,~开头表示区分大小写的正则匹配,~*开头表示不区分大小写的正则匹配,/通用匹配,如果没有其他匹配,任何请求都会匹配到
location ~* ^.+\.(ico|gif|jpg|jpeg|png|html|htm|css|js|swf|wav)$ {
#设置浏览器缓存,可以控制Http应答中的“Expires”,"Cache-Control",的Header头信息
expires 10d;
proxy_cache cache_one;
proxy_cache_valid 200 304 301 302 10m;
proxy_cache_valid any 30s;
proxy_cache_key $host$uri$is_args$args;
proxy_pass http://sysjob;
access_log off;
}
location ~ ^/(logs)/ {
deny all;
}
location = /WEB-INF/ {
return 403;
}
location / {
#limit_req zone=twelve burst=150;
#limit_req zone=twelve burst=150 nodelay;
proxy_next_upstream error timeout http_503 http_502 http_504;
proxy_pass http://sysjob;
}
#location @rule1 {
# proxy_next_upstream error timeout http_503 http_502 http_504;
# proxy_pass http://sysjob;
# access_log D:/nginx-1.9.12/nginx-1.9.12/mylogs/rule main;
# }
}
}
因此要找出原因在哪里,没有使用缓存,在本地做了域名解析,以及修改了resin的配置文件,访问成功,没有问题,但是使用那个同学的账号登陆依旧是错误502,不知道哪位有没有跟我一样遇到这些问题。如果遇到,谢谢指明错误在哪里。
另外关于nginx的配置文件的具体内容,会后续补充,今天有些累了,就先写这么多。