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

  原理是这样:

    方案一:

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

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

    方案二:

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

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

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

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

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

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

<VirtualHost *:>
  DocumentRoot /www/web/madmin/public_html
  #ServerName admin..com
  #ServerAlias 10.8.0.1
  ServerName 192.168.1.212
  ErrorDocument /errpage/.html
  ErrorDocument /errpage/.html
  ErrorDocument /errpage/.html
  #php_admin_value open_basedir /www/web/madmin:/tmp
  <IfModule mod_deflate.c>
    DeflateCompressionLevel
    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:;
keepalive ;
} upstream k_api {
server 172.17.0.27:;
keepalive ;
} server {
listen ;
server_name admin..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 ;
proxy_read_timeout ;
proxy_send_timeout ;
} 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 ;
proxy_read_timeout ;
proxy_send_timeout ;
}
}

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

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

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

#修改时间
date -s :: # 时间改为了 ::
date -s # 日期更改为2017//
date -s ”:: --“ # 时间改为了2017-- :: #修改时区
tzselect #根据提示修改成相应时区

问题4、监听端口问题?

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

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

最新文章

  1. 还敢说你是程序员?一律师闲着没事写了个app,用户量600万
  2. HTML5 audio与video标签实现视频播放,音频播放
  3. MySQL服务 - MySQL程序的配置文件、参数、变量查看
  4. raspberry pi的网络配置
  5. Hive性能优化
  6. 指定的参数已超出有效值的范围 参数名: utcDate WebResource异常
  7. 暑假训练round2 D: 好序列(Manacher)
  8. OK335xS Linux kernel check clock 24M hacking
  9. 从scanf的学习接口设计
  10. 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。
  11. 第二百三十九天 how can I 坚持
  12. Mysql分表和分区的区别
  13. [转载]C#播放流媒体的几种方法
  14. 2017-2018 ACM-ICPC, NEERC, Southern Subregional Contest, qualification stage (Online Mirror, ACM-ICPC Rules, Teams Preferred)
  15. 排列熵算法简介及c#实现
  16. ubuntu 安装 npm、nodejs 各种问题
  17. 【JavaScript】DOM和BOM之我的理解
  18. foreach循环详解
  19. [python]Flask-migrate简单入门
  20. 设计模式之Adapter(适配器)(转)

热门文章

  1. intellij idea 13&amp;14 插件推荐及快速上手建议 (已更新!)
  2. linux大杂烩
  3. C语言两个libxml2库使用的问题
  4. cocos2dx对于强大的RichText控制
  5. 【WebSocket初探 】
  6. Solr 教程
  7. IOC容器在框架中的应用
  8. Effective C++(13) 用对象管理资源
  9. 开发使用混合式Winform模块
  10. 增删查改-MySQL