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 http://tomcatserver/usercenter;
}

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;
				}
}

测试 https://192.168.6.130:443


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