本文档将使用一台nginx服务器,反向代理HTTP和HTTPS,详细配置方法如下:
http server 地址:http://10.0.33.248:8080
nginx代理服务器地址:10.0.33.147
操作系统为 centos6.6
登录到centos服务器,配置epel源,执行一下命令
yum install epel-release`
创建文件/etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/x86_64/
gpgcheck=0
enabled=1
安装nginx
yum install nginx
使用80端口转发http,那么需要把默认配置删除,或者注释掉
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
创建文件/etc/nginx/conf.d/http.conf,修改IP和端口
upstream cloudmanager {
server 10.0.33.248:8080;
}
server {
listen 80;
server_name 10.0.33.147; #本机IP
location / {
proxy_pass http://cloudmanager;
#代理设置
proxy_redirect off;
proxy_set_header Host $host;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#允许客户端请求的最大单文件字节数
client_max_body_size 10m;
#缓冲区代理缓冲用户端请求的最大字节数,
client_body_buffer_size 128k;
#nginx跟后端服务器连接超时时间(代理连接超时)
#后端服务器连接的超时时间,发起握手等候响应超时时间
proxy_connect_timeout 90;
#连接成功后,后端服务器响应时间(代理接收超时)
#连接成功后,等候后端服务器响应时间,其实已经进入后端的排队之中等候处理
#(也可以说是后端服务器处理请求的时间)
proxy_read_timeout 90;
# 后端服务器数据回传时间,就是在规定时间之内后端服务器必须传完所有的数据
proxy_send_timeout 90;
#设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffer_size 4k;
#proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_buffers 4 32k;
#高负荷下缓冲大小(proxy_buffers*2)
proxy_busy_buffers_size 64k;
#设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_temp_file_write_size 64k;
proxy_next_upstream error timeout invalid_header http_500 http_502
http_503 http_504;
}
}
重启nginx服务
service nginx restart
访问 http://10.0.33.147/ 验证有效。
https地址 https://10.0.33.64:9443 这里我用的是vcenter, 端口参考
和 这里
创建并修改/etc/nginx/conf.d/https.conf,使用本机443端口代理9443,
7331代理7331(websocket端口),修改配置之前,我们先制作一下证书。
初始配置,进入目录/etc/pki/CA/,其他系统目录可能不同.参考这里
cd /etc/pki/CA/
mkdir -p CA/newcerts
touch CA/index.txt
touch CA/serial
echo "01" > CA/serial
ca.key CA私钥:
openssl genrsa -des3 -out ca.key 2048
制作解密后的CA私钥(一般无此必要):
openssl rsa -in ca.key -out ca_decrypted.key
ca.crt CA根证书(公钥):
openssl req -new -x509 -days 7305 -key ca.key -out ca.crt
在这里,假设网站域名为10.0.33.147
生成10.0.33.147证书私钥(pass phrase填123):
openssl genrsa -des3 -out nginx.pem 2048
制作解密后的10.0.33.147证书私钥:
openssl rsa -in nginx.pem -out nginx.decode.key
生成签名请求:
openssl req –new -key nginx.pem -out nginx.csr
在common name中填入网站域名。
用CA进行签名:
openssl ca -policy policy_anything -days 1460 -cert ca.crt -keyfile ca.key –in nginx.csr -out nginx.crt
其中,policy参数允许签名的CA和网站证书可以有不同的国家、地名等信息,days参数则是签名时限。
证书自制完成。
创建并修改/etc/nginx/conf.d/https.conf,使用本机443端口代理9443,
7331代理7331(websocket端口),修改ip,端口和相应的证书路径,参考这里
upstream vcenter-9443 {
server 10.0.33.64:9443;
}
upstream vcenter-7331 {
server 10.0.33.64:7331;
}
server {
listen 443;
server_name 10.0.33.147;
ssl on;
ssl_certificate /root/ssl/nginx.crt ;
ssl_certificate_key /root/ssl/nginx.decode.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
keepalive_timeout 60;
location / {
proxy_pass https://vcenter-9443;
allow all;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 7331;
server_name 10.0.33.147;
ssl on;
ssl_certificate /root/ssl/nginx.crt ;
ssl_certificate_key /root/ssl/nginx.decode.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
keepalive_timeout 60;
location / {
proxy_pass https://vcenter-7331;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
并重启nginx服务
service nginx restart
访问https://10.0.33.147,验证有效。