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

通过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替换

你可能感兴趣的:(nginx)