php语言搭建nginx反向代理,负载均衡常遇到的问题
1、当配置好nginx配置,搭建好反向代理后,出现点击网站链接找不到路径404页面的情况
把标出的这行给注释上就行了,因为这行会重定向以.php结尾的文件,所以不会走下面的location反向代理
2、修改nginx配置,搭建负载均衡
其实很简单,只需配置这两项就可以了,注意upstream是和server同级的,不是在server内配置的
3、还有一步重要的,实现session共享,我是以redis实现session共享的
首先在服务器里分别搭建redis服务器,原理是让每台网站服务器都redis远程链接让session存储在固定的一台redis服务器,来实现共享
修改redis配置
3.1、bind 127.0.0.1是只允许本机访问的,不允许redis远程访问,修改成0.0.0.0就可以访问了
redis3.2版本后新增protected-mode配置,默认是yes,即开启。设置外部网络连接redis服务,设置方式如下:
1、关闭protected-mode模式,此时外部网络可以直接访问
2、开启protected-mode保护模式,需配置bind ip或者设置访问密码
设置daemonize yes ,让redis在后台自启,不用每次手动启动
设置密码
以上是一些准备工作。
4、修改一下我们服务器session存储方式,可以在php.ini里改,也可以用ini_set在页面里临时改。在这建议用ini_set修改,不影响其他的网站
ini_set("session.save_handler", "redis"); // ini_set("session.bind", '0.0.0.0'); ini_set("session.save_path", "tcp://192.168.0.127:6379"); // ini_set('default_socket_timeout', -1); session_start();//存入session $_SESSION['hu'] = '123';//连接redis $redis = new redis(); $redis->connect('192.168.0.127', 6379); // $redis->auth('qw12!@'); //检查session_idecho echo 'session_id:' . session_id() . '<br/>'; //redis存入的session(redis用session_id作为key,以string的形式存储) echo 'redis_session:' . $redis->get('PHPREDIS_SESSION:' . session_id()) . '<br/>'; echo $_SESSION['name']; //php获取session值echo 'php_session:' . json_encode($_SESSION['class']);
注意session_start();不要放在ini_set的前面,不然会报错
PHP Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in path\to\file.php on line 79
如果要在脚本中使用ini_set()更改PHP的session配置参数,需要在调用session_start()开会会话以前完成ini参数的修改工作,会话已经启动的时候再去修改SESSION运行时配置参数,将会触发一个警告级别的错误,并且对配置参数的修改也不会生效。
PHP Warning并不会影响后续代码,可以在ini_set()前面添加一个 @ 符号来屏蔽错误信息。
还有$_SESSION也需要在ini_set后边才能调用