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后边才能调用

猜你喜欢

转载自www.cnblogs.com/hualingyun/p/11243283.html
今日推荐