加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

nginx反向代理转发apache配置 之 cookie去哪儿了?

发布时间:2020-05-22 20:38:07 所属栏目:Linux 来源:互联网
导读:在公司接手了个微信项目,由于微信环境下访问网站需要使用对外开放的域名,所以有相关问题,都是直接运维同事帮忙处理。原理是这样:方案一:1. 将域名解析指向测试服务器的地址;2. 开放相关端口访问权限;方案二:1. 将域名解析指向内网测试服务器的某一台

  在公司接手了个微信项目,由于微信环境下访问网站需要使用对外开放的域名,所以有相关问题,都是直接运维同事帮忙处理。

  原理是这样:

    方案一:

      1. 将域名解析指向测试服务器的地址;

      2. 开放相关端口访问权限;

    方案二:

      1. 将域名解析指向内网测试服务器的某一台;(也方便用于测试https证书问题)

      2. 由该台服务器转发服务到相应需要的测试服务器;

      3. 开发本台测试服务器及转发的测试服务器的端口权限;

  最初,我们使用第一种方案,但是每次都要麻烦好几组的同事一起处理,才能搞定,因此启用了方案二。开了一台中转服务器,搭建nginx服务,指向了我们当前测试的一台服务器,其间,遇到的问题。运维同事没时间,交给我们自己来搞。好嘛,遇到问题了。

问题1、无法找到相应项目问题?

  因为nginx只负责将请求转发到该台机器的80或其他端口上了,并没有仔细配置,因此无法找到对应的项目。 解决:在apache 中添加相应vhost配置,示例如下:

/www/web/madmin/.. /errpage/ /errpage/ /errpage//www/web/madmin://html text/plain text/xml application/x-httpd-

  ,这样,服务器就能正常解析项目了。

问题2、转发过来后,客户端ip获取不到了,得到的只是一个代理服务器ip。

  因为涉及到转发,所有的东西都是可能丢掉的,在这里,就需要将原始IP转发过来,如下:

.:upstream k_api {
server <span style="color: #800080">172.17.<span style="color: #800080">0.27:<span style="color: #800080">8080<span style="color: #000000">;
keepalive <span style="color: #800080">8<span style="color: #000000">;
}

server {
listen <span style="color: #800080">8091<span style="color: #000000">;
server_name admin.<span style="color: #800080">123<span style="color: #000000">.com;

    location </span>/<span style="color: #000000"&gt;api {
            proxy_pass http:</span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;k_api;</span>

<span style="color: #000000"> proxy_set_header Host $host; #域名转发
proxy_redirect off;
proxy_set_header X-Real-<span style="color: #000000">IP $remote_addr; #IP转发
proxy_set_header X-Forwarded-<span style="color: #000000">For $proxy_add_x_forwarded_for;
proxy_connect_timeout <span style="color: #800080">60<span style="color: #000000">;
proxy_read_timeout <span style="color: #800080">600<span style="color: #000000">;
proxy_send_timeout <span style="color: #800080">600<span style="color: #000000">;
}

    location </span>/<span style="color: #000000"&gt; {
            proxy_pass http:</span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;apache/h5/;    #转发到服务器后,加相对目录地址</span>

<span style="color: #000000"> proxy_set_header Host $host;
proxy_redirect off;
proxy_set_header X-Real-<span style="color: #000000">IP $remote_addr;
proxy_set_header X-Forwarded-<span style="color: #000000">For $proxy_add_x_forwarded_for;
proxy_connect_timeout <span style="color: #800080">60<span style="color: #000000">;
proxy_read_timeout <span style="color: #800080">600<span style="color: #000000">;
proxy_send_timeout <span style="color: #800080">600<span style="color: #000000">;
}
}

问题3、使用nginx代理后,一直无法登录,经排查为cookie无法保存?

  这个问题困扰了我很久,也找了运维同事请教了很久,始终无法解决。最终,花了很多时间去找资料,自己做了许多尝试,终于发现了。 原来是服务器时间差的问题,nginx服务器的时区设置为 EST,apache服务器的时区设置是 CST,其时区相差8小时。所以cookie无效了。具体原理就是,登录后会在apache所在服务器设置cookie,有效期为1小时内有效,而转到nginx后,时间却往前了8小时,因此服务器(或者是客户认为)会认为该cookie是过期的,因此不会被保存起来了。

  解决:更改nginx时区和时间,和apache一致。修改时间时区的命令如下:

-s :: # 时间改为了 :: -s # 日期更改为2017// -s ”:: --“ # 时间改为了2017-- ::修改时区

tzselect #根据提示修改成相应时区

问题4、监听端口问题?

  根据需要设置监听相应端口,注意端口不能冲突了!

nginx其实挺好玩的,有很预置变量,不懂的去搜下文档,基本都能解决。 重在实践吧!

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读