Nginx反向代理

Nginx反向代理

本文档将使用一台nginx服务器,反向代理HTTP和HTTPS,详细配置方法如下:

反向代理HTTP

http server 地址:http://10.0.33.248:8080

nginx代理服务器地址:10.0.33.147 操作系统为 centos6.6

配置yum源

登录到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地址 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证书

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

生成网站的证书并用CA签名认证

在这里,假设网站域名为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.keyin nginx.csr -out nginx.crt  

其中,policy参数允许签名的CA和网站证书可以有不同的国家、地名等信息,days参数则是签名时限。

证书自制完成。

配置Nginx for HTTPS

创建并修改/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,验证有效。

你可能感兴趣的:(Nginx反向代理)