您的位置:首页 > 运维架构 > 反向代理

通过Nginx反向代理提供网站内嵌

2019-05-02 12:33 211 查看

通过Nginx反向代理提供网站内嵌

公司需要提供对外服务给合作伙伴,对方公司需要内嵌我方公司网站,确定后决定使用nginx反向代理

实现细节分析

1.配置对方公司域名转发至公司网站
2.修改公司网站中含有公司域名的网站先通过nginx转发
3.修改公司cookie 中的domain 解决cookie跨域问题
4.使用openssl 生成https自签名证书 参考:使用openssl生成自签名证书

配置细节

1.下载nginx源码版:nignx下载地址

wget  https://nginx.org/download/nginx-1.15.12.tar.gz
# 解压
tar -xf nginx-1.15.12.tar.gz

2.设置编译参数 建议添加 replace-filter-nginx-module 模块,该模块支持正则替换和json替换,如果不需要这些功能仅仅需要替换html 可以仅仅添加http_sub_module这个功能较弱一点 两种方式配置如下

# 1.配置替换模块并编译启动nginx
#  使用 replace-filter-nginx-module
# 1.安装sregex模块:
# github克隆编译
git clone https://github.com/agentzh/sregex
cd sregex
make
make install
ldconfig #动态库刷新 否则可能找不到动态库
# 2.下载 replace-filter-nginx-module 
git clone https://github.com/openresty/replace-filter-nginx-module.git
# 3.第三方模块使用add-module
./configure --add-module=/{第二步的下载步骤}/replace-filter-nginx-module --{其他参数}
#  使用http_sub_module 非第三方模块直接使用
./configure --with-http_sub_module --{其他参数}
# 编译nginx
make & make install
# 启动nginx
./nginx

3.nginx.conf 修改

server {
# google DNS服务
resolver 8.8.8.8;
# 协议端口 根据需要进行实际修改
listen  443 ssl;
listen  80;
# 使用openssl生成的证书 
ssl_certificate /usr/local/software/nginx/ssl/server.crt;
ssl_certificate_key /usr/local/software/nginx/ssl/server.key;
ssl_session_cache    shared:SSL:1m;
ssl_session_timeout  5m;
# 指定密码为openssl支持的格式
ssl_protocols  SSLv2 SSLv3 TLSv1.2;
ssl_ciphers  HIGH:!aNULL:!MD5;  # 密码加密方式
ssl_prefer_server_ciphers  on;
# 代理方域名
server_name   ~^(?<domain>[^.]+\.)proxydemo.net$;
root          /usr/share/nginx/html;

location / {
proxy_set_header           X-Real-IP $remote_addr;

# 使用 http_sub_module替换
# sub_filter 'company.net' 'proxydemo.net';
# sub_filter_once off;
# 使用 replace-filter-nginx-module替换
replace_filter 'company\.net' 'proxydemo.net' g;
replace_filter_types application/json;
add_header Access-Control-Allow-Origin '*';
# 被代理源网站 由于代理时使用了表达式 必须配置DNS
proxy_pass https://${domain}company.net;
# cookie
proxy_cookie_domain  .company.net .proxydemo.net;
proxy_cookie_domain  .${domain}company.net .${domain}proxydemo.net;
}
}

4.重启nginx

nginx -s reload

最后

该配置采坑无数,验证可行出现不可行原因请参照以下解决
1.404: 域名解析
2.登录失败:检查cookie domain
3.https不可用:检查生成openssl时host配置
4.json返回信息不可替换:使用replace-filter-nginx-module替换

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐