场景:有两台阿里云的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) |