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