利用反向代理对IP地址的文根修改

起因

应用程序挂到公网时,域名地址不能沿用开发测试时类似IP+Port+AppName这种粗狂的形式,需要改成一些高大上的地址,或者现有的nginx需要以文根区分不通应用从而进行分发处理。
当然改变文根的方法有很多种,比如通过映射的方式:

# Spring MVC
@RequestMapping(value = "/prefix/Demo")
# Python
# 创建
bp=Blueprint('prefix',__name__,url_prefix='/prefix') 
# 使用
@admin.route('/Demo')
# 注册
app.register_blueprint(prefix.bp)

但是通过映射的方式可能会破坏原来的层次结构和代码逻辑的,至少涉及ajax的js也需要相应调整,所以不太推荐。这里我推荐采用了nginx/apache的反向代理,把请求进行处理转发,无需对原有的代码进行任何修改。

实践

举个例子:

公网地址:https://www.lovewow.cn/testApp
内网地址:https://127.0.0.1:6666
比如:表面上访问https://www.lovewow.cn/testApp/xxx,其实是想访问https://127.0.0.1:6666/xxx

nginx

server {
	listen 80;
	server_name https://www.lovewow.cn;
	charset utf-8;
	#access_log logs/host.access.log main;

	location /testApp/ { 
		# 访问https://www.lovewow.cn/testApp就会转发到下面proxy_pass的值
		proxy_pass https://127.0.0.1:6666/;
	}
}

Apache

# 保证以下模块加载  
LoadModule proxy_module modules/mod_proxy.so  
LoadModule proxy_http_module modules/mod_proxy_http.so  
# 配置ProxyPass
# ProxyPassReverse的配置总是和ProxyPass 一致,ProxyPassReverse防止页面内重定向导致无法访问
ProxyPass /testApp/ https://127.0.0.1:6666/
ProxyPassReverse /testApp/ https://127.0.0.1:6666/

其中可能遇到的问题
1 nginx日志中文出现乱码(其实是十六进制类似\xAB)

2 出现关于SSL的错误

# nginx的错误
ERR_SSL_PROTOCOL_ERROR
# 解决方法
ssl   on;
ssl_certificate   /path/xxx.crt;
ssl_certificate_key   /path/xxx.key;
ssl_verify_client off; 

# Apache的错误
AH01961: SSL Proxy requested for https://www.lovewow.cn/testApp/xxx but not enabled [Hint: SSLProxyEngine]
AH00961: HTTPS: failed to enable ssl support for 127.0.0.1:6666 (127.0.0.1)
# 解决方法
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值