当前位置: > Linux服务器 > nginx >

Nginx反向代理https

时间:2015-01-31 20:00来源:linux.it.net.cn 作者:IT

场景:有两台阿里云的CentOS服务器。一台有两个网卡,一个内网卡,一个外网卡,部署有nginx。另外一台是内网服务器,部署有tomcat,无法访问外网。现内网服务器现需要访问一个外网的https站点。

解决思路:先通过nginx反向代理https站点,然后修改内网服务器的hosts文件,将https站点劫持到外网服务器的内网IP上。

知识普及:反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

一、在nginx目录下新建ssl文件夹,并生成私有key和证书

# mkdir /etc/nginx/ssl

//生成一个私有key
# openssl genrsa -des3 -out jpush.cn.key 1024 

//生成CSR(Certificate Signing Request)文件。提示填写证书内容、组织机构、邮件等。Common Name请填写要代理的域名
# openssl req -new -key jpush.cn.key -out jpush.cn.csr

//根据jpush.cn.key生成一个没有password的私有key。这个没有password的key的作用是重启nginx的时候,不需要输入密码
# openssl rsa -in jpush.cn.key -out jpush.cn_nopasswd.key

//生成crt文件
openssl x509 -req -days 365 -in jpush.cn.csr -signkey jpush.cn_nopasswd.key -out jpush.cn.crt

好了。以上生成最重要的两个文件jpush.cn_nopasswd.key和jpush.cn.crt

二、配置nginx的conf文件

# vim /etc/nginx/conf.d/jpush.conf

//写入以下内容
server {
        ### server port and name ###
        listen          443;
        server_name     api.jpush.cn;
        ssl on;

        ### SSL log files ###
        access_log      logs/ssl-access.log;  //这个需要先行创建好目录及文件
        error_log       logs/ssl-error.log;

        ### SSL cert files ###
        ssl_certificate      ssl/jpush.cn.crt;   //证书和key
        ssl_certificate_key  ssl/jpush.cn_nopasswd.key;
        ### Add SSL specific settings here ###
        keepalive_timeout    60;

        ###  Limiting Ciphers ########################
        # Uncomment as per your setup
        #ssl_ciphers HIGH:!ADH;
        #ssl_perfer_server_ciphers on;
        #ssl_protocols SSLv3;
        ##############################################
        ### We want full access to SSL via backend ###
        location / {
                proxy_pass      //填写你要代理的https站点 
                ### force timeouts if one of backend is died ##
   proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;

                ### Set headers ####
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                ### Most PHP, Python, Rails, Java App can use this header ###
                proxy_set_header X-Forwarded-Proto https;

                ### By default we don't want to redirect it ####
                proxy_redirect     off;
                }
      }
 
以上配置完成后保存,然后nginx configtest,再nginx reload,如果没有问题,查看端口netstat -ntpl
tcp   0   0 0.0.0.0:443  0.0.0.0:*     LISTEN    4681/nginx

三、修改内网服务器的hosts文件

# vim /etc/hosts
//添加记录
10.168.69.205   api.jpush.cn    //IP地址是外网服务器的内网IP,域名是要Nginx配置的server_name

四、用curl验证

//--insecure表示忽略检验步骤。-v表示查看详细信息 
# curl --insecure -v  

返回值就表示成功了
(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容