• CentOS 7 学习(二) 配置Nginx反向代理


    CentOS 7 学习(二) 配置Nginx反向代理 

    Nginx可以通过php-fpm来运行PHP程序,也可以转向apache,让apache调用php程序来运行。 
    不过对于Nginx来说,其反向代理功能更值得研究,下面配置一下让Nginx反向代理3台Apache服务器,同时配置memcache作为session保存路径 
    1、环境 
    CentOS 7 ,192.168.1.14, Apache 80, Nginx 808 
    CentOs 7 ,192.168.1.12,Apache 80 
    Ubuntu 14.04 Server, 192.168.1.161, Apache 80 
    2、配置Nginx,修改nginx.conf如下 
    http { 
    include mime.types; 
    default_type application/octet-stream; 

    #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
    # '$status $body_bytes_sent "$http_referer" ' 
    # '"$http_user_agent" "$http_x_forwarded_for"'; 

    #access_log logs/access.log main; 

    sendfile on; 
    #tcp_nopush on; 

    #keepalive_timeout 0; 
    keepalive_timeout 65; 

    #gzip on; 


    upstream php_server_pool{ 
    server 192.168.1.12:80 weight=4 max_fails=2 fail_timeout=30s; 
    server 192.168.1.14:80 weight=4 max_fails=2 fail_timeout=30s; 
    server 192.168.1.161:80 weight=4 max_fails=2 fail_timeout=30s; 

    server { 
    listen 808; 
    server_name localhost; 

    #charset koi8-r; 

    #access_log logs/host.access.log main; 

    location / { 
    root html; 
    index index.html index.htm; 

    proxy_next_upstream http_502 http_504 error timeout invalid_header ; 
    proxy_pass http://php_server_pool
    proxy_set_header Host www.shiyq.com
    proxy_set_header X-Forwarded-For $remote_addr; 


    在http下一级增加upstream标签,名字为php_server_pool,这是一个服务器池,增加三台主机,分别12、14、161,权重相同,失败次数为2次,失败时间为30秒。 
    在server的下一级的location /下增加 
    proxy_next_upstream http_502 http_504 error timeout invalid_header ; 
    proxy_pass http://php_server_pool
    proxy_set_header Host www.shiyq.com
    proxy_set_header X-Forwarded-For $remote_addr; 
    也很容易理解,如果出现502、504、超时、无效标题头就转到下一台机器,根目录转到服务器池某台机器的根目录。 
    重启nginx,可以kill -HUP nginx 
    在三台机器的根目录,编辑测试文件,输出访问的主机地址 
    vim /etc/www/html/hello.php 
    <?php 
    echo $_SERVER['SERVER_ADDR'] . ' Weclome you !'; 
    ?> 
    在浏览器中录入:http://192.168.1.14:808/hello.php 
    可以根据页面的输出看到确实切换到了不同的机器 
    3、用memcache保存session 
    用nginx做反向代理非常容易,但是每次访问都会切换机器(权重是相同的),可以用ip_hash指令让nginx对于同一个session不切换机器,这个指令的效果暂且不论,想要测试这个环境就不太容易,你不清楚到底是切换无效了,还是ip_hash生效了,这个问题以后再研究,这里采取memcache保存session的方法来处理切换问题。 
    1)安装memcache 
    CentOS 7 : yum install memcached php-pecl-memcache 
    Ubuntu 14.04: sudo apt-get install php5-memcache memcached 
    2)启动memcache 
    在192.168.1.12上启动memcache 
    memcached -u root 
    memcached的参数很多,可以指定内存、端口等等,有空可以研究,默认端口为12111,如果是root用户,必须指定 -u 参数 
    配置防火墙,开放端口 
    如果是iptables,vim /etc/sysconfig/iptables,默认情况下,文件中都会开放22端口,如下 
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 
    复制这一行,将22改为11211即可,重启防火墙 
    如果是firewalld,运行命令 
    firewall-cmd --add-port=11211/tcp 
    firewall-cmd --permanent --add-port=11211/tcp 
    测试效果 
    telent 192.168.1.12 12111 
    如果可以登录,说明启动正常 
    3)修改php.ini来支持memcache保存session 
    Ubuntu 14.04, sudo vim /etc/php5/apache2/php.ini ,修改文件如下 
    session.save_handler = memcache 
    session.save_path = "192.168.1.12:11211"
    CentOS 7,修改修改两个文件:/etc/php.ini,/etc/httpd/conf.d/php.conf 
    session.save_handler = memcache 
    session.save_path = "192.168.1.12:11211" 
    一定要注意要修改php.conf文件,否则默认还是保存在文件里 
    在info.php中,可以看到session的session.save_path和session.save_handler,有两列local value和master value,一定都要改变才行,切记。 
    4)测试效果 
    在根目录编辑文件 
    vim login.php 
    <?php 

    echo $_SERVER['SERVER_ADDR'].' Welcome you!'; 
    session_start(); 

    $_SESSION['name']='石永强-14'; 
    $_SESSION['pwd']='密码tt'; 
    $session_id=session_id(); 
    echo "sid:".$session_id."<br>"; 
    echo '<br><a href="./read.php">read session</a>'; 

    ?> 

    vim read.php 
    <?php 

    echo $_SERVER['SERVER_ADDR'].' Welcome you'; 
    session_start(); 

    $session_id=session_id(); 
    echo "sid:".$session_id."<br>"; 

    echo 'name:'.$_SESSION['name']."<br>"; 
    echo 'pwd:'.$_SESSION['pwd']."<br>"; 

    echo '<br><a href="./login.php">login session</a>'; 
    ?> 
    注意在不同的机器上,name变量的末尾和主机ip最后一个数字一致,如石永强-161,石永强-14 
    这样刷新http://192.168.1.14:808/login.php,可以看到地址在变化,点击read session,可以看到最后一个session信息,刷新页面,虽然主机切换了,但是session信息不变。 
    用telnet 也可以看到 
    [root@centos1 html]# telnet 192.168.1.12 11211 
    Trying 192.168.1.12... 
    Connected to 192.168.1.12. 
    Escape character is '^]'. 
    get pd8k8rju5g4fpbfmm5kuaid3j0 
    VALUE pd8k8rju5g4fpbfmm5kuaid3j0 0 42 
    name|s:12:"石永强-12";pwd|s:6:"密码"; 
    END 
    其中pd8k8rju5g4fpbfmm5kuaid3j0是session ID,可以看到memcache保存了session,可以共享
    5)配置自动启动
    修改文件 /etc/rc.local,注意/etc/rc.local为/etc/rc.d/rc.local的符号链接,需增加其执行权限,默认是没有执行权限的,其实文件的注释里有,不过开始没有注意,以为/etc/rc.local失效了呢
    chmod +x /etc/rc.d/rc.local
    vim /etc/rc.local
    /bin/memcached -m 128 -u root &
    su - root -c /sbin/php-fpm &
    su - root -c /usr/local/nginx/sbin/nginx &
    注意后两者需要用root用户启动,而且最后要加上后台执行符号,否则重启之后,本机的终端就死在那里了,虽然ssh可以登录
  • 相关阅读:
    Python--json处理
    Python--加密模块
    Python--函数即变量
    bzoj 2276: [Poi2011]Temperature
    1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛
    2017 9 15 noip模拟赛
    bzoj 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛
    2017 9 11 noip模拟赛T2
    URAL 1613. For Fans of Statistics (2017 9 6 noip模拟赛T3)
    codeforces 105 B. Dark Assembly(birbe贿赂 noip模拟赛)
  • 原文地址:https://www.cnblogs.com/stone-fly/p/3890691.html
Copyright © 2020-2023  润新知