1.nginx常用命令
启动nginx:start nginx
查看nginx的进程(用此命令判断nginx启动是否正常):tasklist /fi "imagename eq nginx.exe"
启动报错看:logs\error.log文件
快速停止应用:nginx -s stop
优雅的停止应用:nginx -s quit
更改配置,使用新配置启动新工作进程,正常关闭旧工作进程:nginx -s reload(必须nginx进程起了才能重新加载) ;
测试配置是否有误:nginx -t
重新打开日志文件:nginx -s reopen
2.nginx配置
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#配置负载均衡:负载流 portal为此流的名称与proxy_pass:中配置的名称一致
upstream portal{
#ip_hash保证session同步,第一次请求分配给那个tomcat后,该用户的ip就与该tomcat绑定起来了.
#ip_hash;
server 10.50.100.34:80 weight=1 fail_timeout=5s;
server 10.50.100.34:8080 weight=1 fail_timeout=5s;
}
#虚拟主机
server {
listen 8080;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
#虚拟主机,当访问nginx服务器80端口时,会将请求转发给proxy_pass中指定的地址或者负载流
server {
listen 80;
server_name www.xiaozhou.com;
location /{
index index.html index.htm index.php;
index proxy_set_header Host $host;
index proxy_set_header X-Real-IP $remote_addr;
index proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_redirect off;
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_pass http://fportal;
}
}
#虚拟主机,配置https
server {
listen 443 ssl;
server_name www.test.com;
ssl_certificate ../server.crt;
ssl_certificate_key ../server.key;
ssl_session_timeout 5m;
# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
# ssl_prefer_server_ciphers on;
location / {
#root html;
#index testssl.html index.html index.htm;
proxy_redirect off;
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://portal;
}
}
}
说明:https证书的,可以到阿里云下载,笔者当时下载的时候需要收费,所以选择openssl生成证书。
由于Ip_hash这种集群的方式存在,当第一次访问分配的tomcat节点挂了,用户的session就会失效,这种方式不是根本上解决session同步的问题,建议使用Spring-Hession+redis的方式实现session同步,详情请参看笔者的tomcat实现session同步。