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

摘要:
我们打开了一个transit服务器并设置了nginx服务,指向我们当前正在测试的服务器。在这个过程中,我们遇到了问题。由于nginx只负责将请求转发到机器的80或其他端口,因此没有仔细配置,因此无法找到相应的项目。具体原则是,登录后,cookie将设置在Apache所在的服务器上。有效期在1小时内。切换到nginx后,时间提前了8小时。因此,服务器会认为cookie已过期,因此不会保存。

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

  原理是这样:

    方案一:

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

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

    方案二:

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

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

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

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

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

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

<VirtualHost *:80>
  DocumentRoot /www/web/madmin/public_html
  #ServerName admin.123.com
  #ServerAlias 10.8.0.1
  ServerName 192.168.1.212
  ErrorDocument 400 /errpage/400.html
  ErrorDocument 403 /errpage/403.html
  ErrorDocument 404 /errpage/404.html
  #php_admin_value open_basedir /www/web/madmin:/tmp
  <IfModule mod_deflate.c>
    DeflateCompressionLevel 7
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php
    AddOutputFilter DEFLATE css js html htm gif jpg png bmp php
  </IfModule>
</VirtualHost>
<Directory /www/web/mo123/ccww>
  Options FollowSymLinks
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>

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

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

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

upstream apache {
    server 127.0.0.1:80;
    keepalive 8;
}

upstream k_api {
    server 172.17.0.27:8080;
    keepalive 8;
}

server {
        listen 8091;
        server_name admin.123.com;

        location /api {
                proxy_pass http://k_api;
                proxy_set_header Host $host;    #域名转发
                proxy_redirect off;
                proxy_set_header X-Real-IP $remote_addr;  #IP转发
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_connect_timeout 60;
                proxy_read_timeout 600;
                proxy_send_timeout 600;
        }

        location / {
                proxy_pass http://apache/h5/;    #转发到服务器后,加相对目录地址
                proxy_set_header Host $host;
                proxy_redirect off;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_connect_timeout 60;
                proxy_read_timeout 600;
                proxy_send_timeout 600;
        }
}

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

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

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

#修改时间
date -s 12:12:12 # 时间改为了 12:12:12
date -s 20170112 # 日期更改为2017/01/12
date -s ”12:12:12 2017-01-00“ # 时间改为了2017-01-00 12:12:12

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

问题4、监听端口问题?

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

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

免责声明:文章转载自《nginx反向代理转发apache配置 之 cookie去哪儿了?》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ICE框架之Slice2CSharp映射---异常的映射Logback 也爆雷了,惊爆了。。。下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

apache启动服务报错ServerRoot must be a valid directory

【现象】 D:apacheApache24in>httpd -k install Installing the 'Apache2.4' service The 'Apache2.4' service is successfully installed. Testing httpd.conf.... Errors reported here mu...

Zk学习笔记——权限控制

参考:从Paxos到Zookeeper分布式一致性原理和实践 使用的zk依赖是cdh5.16.2的3.4.5 <!-- zookeeper --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zo...

网站日志流量分析系统之(日志埋点)

一、概述    日志埋点分为客户端和服务器端。参考并转自:https://www.cnblogs.com/hzhuxin/p/11152805.html,如有侵权,请联系删除。)   ①客户端埋点:支持 iOS、安卓、Web/H5、微信小程序,主要用于分析 UV、PV、点击量等基本指标。例:下图是Web端的埋点技术图:       ②服务器日志:采集后端业...

校验文件是否是Excel文件

一、从excel里导入数据,首先是判断文件是否是一个excel文件 import java.io.InputStream; import java.text.DecimalFormat; import java.util.Objects; import org.apache.poi.poifs.filesystem.FileMagic; import o...

poi操作word文档文件操作

import org.apache.poi.POITextExtractor; import org.apache.poi.hwpf.extractor.WordExtractor; //得到.doc文件提取器 org.apache.poi.hwpf.extractor.WordExtractor doc = new WordExtractor(ne...

Apache DBUtils

Apache DBUtils 下载Commons-dbutils-1.7.jar,其中包含一下几个重点类:Dbutils、QueryRunner、ResultSetHandler 1.DuUtils:辅助 2.QueryRunner:增删改查 update() query()oracle:dml,commitmysql:dml自动提交 3.如果是查询,则需...