nginx代理web服务(http、https)和tcp服务

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,也可以代理tcp服务器,实现负载、主备功能。

下面分别是http、https和tcp服务器的配置。

1.nginx代理http

upstream tomcatserver{   server ip:8080 max_fails=2 fail_timeout=30s;   server ip:8090 max_fails=2 fail_timeout=30s backup; } location /usercenter {   proxy_connect_timeout 1;   proxy_read_timeout 1;   proxy_send_timeout 1;   proxy_next_upstream error timeout http_502 http_503 http_504;   proxy_pass ; }

ip:8080主机

ip:8090备机

参数解释

backup 参数是作为备机使用,当主机挂掉了就会顶上。

max_fails参数的理解:max_fails默认为1,fail_timeout默认为10秒,也就是说,十秒内超过一次故障,标记设备不可用。

proxy_connect_timeout 参数是连接的超时时间。 设置成1,表示是1秒后超时会连接到另外一台服务器。

proxy_read_timeout 参数是接收数据超时时间, 设置成1, 如果连续的1s内没有收到1个字节, 连接关闭,默认60s。

proxy_send_timeout 参数是发送数据到服务器的超时时间, 设置成1, 如果连续的1s内没有发送1个字节, 连接关闭,默认60s。

2.nginx代理tcp服务器

nginx 1.9.0以上版本可以支持tcp服务代理

服务端口 9611

代理服务1:192.168.2.148:9611 权重5

代理服务2:192.168.2.132:9611 权重1

备机:192.168.6.130 当服务1和服务2失败的时候会使用备机。

打开conf/nginx.conf配置文件,输入如下内容。

stream { upstream backend { #     hash $remote_addr consistent; server 192.168.2.148:9611 weight=5 max_fails=1 fail_timeout=30s; server 192.168.2.132:9611 weight=1; server 192.168.6.130:9610 backup; } server { listen 9611 so_keepalive=on;      proxy_connect_timeout 10s;      proxy_timeout 300s; proxy_pass backend; } }

3.nginx搭建https服务器

首先https需要证书,利用openssl可以生成证书请求或生成证书。在linux终端使用openssl命令即可生成。

1、生成RSA密钥的方法

openssl genrsa -des3 -out privkey.pem 2048

这个命令会生成一个2048位的密钥,同时有一个des3方法加密的密码,如果你不想要每次都输入密码,可以改成:openssl genrsa -out privkey.pem 2048建议用2048位密钥,少于此可能会不安全或很快将不安全。

2、生成一个证书请求

openssl req -new -key privkey.pem -out cert.csr

这个命令将会生成一个证书请求,当然,用到了前面生成的密钥privkey.pem文件

这里将生成一个新的文件cert.csr,即一个证书请求文件,你可以拿着这个文件去数字证书颁发机构(即CA)申请一个数字证书。CA会给你一个新的文件cacert.pem,那才是你的数字证书。

现在自己做测试,那么证书的申请机构和颁发机构都是自己。就可以用下面这个命令来生成证书:

openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095

这个命令将用上面生成的密钥privkey.pem生成一个数字证书cacert.pem

有了privkey.pem和cacert.pem文件后就可以在做一个https服务器。

nginx https服务配置

# HTTPS server

server { listen 443 ssl; server_name localhost; ssl_certificate cacert.pem; ssl_certificate_key privkey.pem; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } }

测试 :443

再补充一条,一个nginx服务器可以同时代理多个服务。