当前位置: 首页 > 科技观察

Nginx反向代理转发Apache配置的Cookie哪里去了?

时间:2023-03-12 06:10:14 科技观察

接手了公司的一个微信项目。由于在微信环境下访问网站需要使用对外开放的域名,所以有相关问题由直接运维同事直接处理。原理如下:方案一:将域名解析指向测试服务器地址;开放相关端口访问权限;方案二:将域名解析指向内网某台测试服务器;(也方便测试https证书问题)由本服务器转发服务到对应的测试服务器;制定测试服务器和转发测试服务器的端口权限;最初,我们采用第一种方案,但每次都要麻烦几组同事一起处理,才搞定,所以启用了方案二。开了一个中转服务器,架设了nginx服务,指向了一个我们目前正在测试的服务器,过程中遇到了问题。运维同事没时间,还是自己动手吧。好吧,我们有一个问题。问题1.找不到对应的项目?因为nginx只负责将请求转发到本机的80端口或者其他端口,并没有仔细配置,所以找不到对应的项目。解决方法:在apache中添加相应的vhost配置,示例如下:DocumentRoot/www/web/madmin/public_html  #ServerNameadmin.123.com  #ServerAlias10.8.0.1  ServerName192.168.1.212  ErrorDocument400/errpage/400.html  ErrorDocument403/errpage/403.html  ErrorDocument404/errpage/404.html  #php_admin_valueopen_basedir/www/web/madmin:/tmp      DeflateCompressionLevel7AddOutputFilterByTypeDEFLATEtext/htmltext/plaintext/xmlapplication/x-httpd-php    AddOutputFilterDEFLATEcssjshtmlhtmgifjpgpngbmpphp    OptionsFollowSymLinks  AllowOverrideAll  Orderallow,deny  Allowfromall这样服务器就可以正常解析项目了。问题2、转发后获取不到客户端ip,获取的只是一个代理服务器ip。因为涉及到转发,所以一切都可能丢失。这里需要转发原IP,如下:upstreamapache{server127.0.0.1:80;keepalive8;}upstreamk_api{server172.17.0.27:8080;keepalive8;}server{listen8091;server_nameadmin.123.com;位置/api{proxy_passhttp://k_api;proxy_set_header主机$host;#域名转发proxy_redirectoff;proxy_set_headerX-Real-IP$remote_addr;#IP转发proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_connect_timeout60;proxy_read_timeout600;proxy_send_timeout600;}location/{proxy_passhttp://apache/h5/;;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_connect_timeout60;proxy_read_timeout600;proxy_send_timeout600;这个问题困扰了我很久,也向我的运维同事请教了很久,还是没能解决。最后花了很多时间找资料,自己做了很多尝试,终于找到了。原来是服务器时差的问题。nginx服务器时区设置为EST,apache服务器时区设置为CST,时差8小时。所以cookie是无效的。具体原理是登录后会在apache所在的服务器上设置一个cookie,有效期为1小时内有效,但是切换到nginx后,时间向前移动了8小时,所以服务器(或者客户端认为)会认为cookie已经过期,因此不会被保存。解决方法:更改nginx时区和时间,与apache保持一致。修改时间和时区的命令如下:#Modifytimedate-s12:12:12#Timechangedto12:12:12date-s20170112#Datechangedto2017/01/12date-s”12:12:122017-01-00"#时间已经修改为2017-01-0012:12:12#修改时区tzselect#根据提示修改为对应的时区问题四、监听端口问题?根据需要设置监听端口,注意端口不能冲突!nginx其实挺好玩的,预设的变量很多,不懂的可以搜一下文档,基本就可以了解决它。重点练习!