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可以登录

CentOS 7 学习(二) 配置Nginx反向代理的更多相关文章

  1. 如何在 CentOS 7 用 cPanel 配置 Nginx 反向代理

    导读 Nginx 是最快和最强大的 Web 服务器之一,以其高性能和低资源占用率而闻名.它既可以被安装为一个独立的 Web 服务器,也可以安装成反向代理 Web 服务器.在这篇文章,我将讨论在安装了 ...

  2. Linux 笔记 - 第二十章 配置 Nginx 反向代理和负载均衡

    一.简介 由于 Nginx 的反向代理和负载均衡功能经常被提及,所以将这两个功能单独提出来进行讲解. Nginx 其实仅仅是作为 Nginx Proxy 反向代理使用的,因为这个反向代理功能表现的效果 ...

  3. 配置LANMP环境(7)-- 配置nginx反向代理,与配置apache虚拟主机

    一.配置nginx反向代理 1.修改配置文件 vim /etc/nginx/nginx.conf 在35行http下添加一下内容: include /data/nginx/vhosts/*.conf; ...

  4. 为docker私有registry配置nginx反向代理

    公司的Docker私有registry已经搭建好了,用官方的registry image很容易就搭建好了.现在就是要用nginx的反向代理把它放出来,以便在外网可以访问. 我的上一篇blog 讲了如何 ...

  5. 使用SSL配置Nginx反向代理的简单指南

    反向代理是一个服务器,它接收通过Web发出的请求,即http和https,然后将它们发送到后端服务器(或服务器).后端服务器可以是单个或一组应用服务器,如Tomcat,wildfly或Jenkins等 ...

  6. Centos 7.6配置nginx反向代理,直接yum安装

    一,实验介绍 利用三台centos7虚拟机搭建简单的nginx反向代理负载集群, 三台虚拟机地址及功能介绍 192.168.2.76    nginx负载均衡器 192.168.2.82    web ...

  7. Centos 7.6配置nginx反向代理负载均衡集群

    一,实验介绍 利用三台centos7虚拟机搭建简单的nginx反向代理负载集群, 三台虚拟机地址及功能介绍 192.168.2.76    nginx负载均衡器 192.168.2.82    web ...

  8. Centos 7配置nginx反向代理负载均衡集群

    一,实验介绍 利用三台centos7虚拟机搭建简单的nginx反向代理负载集群, 三台虚拟机地址及功能介绍 192.168.2.76    nginx负载均衡器 192.168.2.82    web ...

  9. node项目发布+域名及其二级域名配置+nginx反向代理+pm2

    学习node的时候也写了一些demo.但是只是限于本地测试,从来没有发布.今天尝试发布项目. 需要准备的东西 node 项目:为了突出重点,说明主要问题.我只是拿express 写了很简单的demo. ...

随机推荐

  1. python进阶------进程线程(五)

    Python中的IO模型 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别 ...

  2. riot.js教程【六】循环、HTML元素标签

    前文回顾 riot.js教程[五]标签嵌套.命名元素.事件.标签条件 riot.js教程[四]Mixins.HTML内嵌表达式 riot.js教程[三]访问DOM元素.使用jquery.mount输入 ...

  3. 重启mysql主从同步mongodb(tungsten-replicator)

    1. 连接mysql mysql -uroot -p;(mysql从库) 输入数据库密码 2. 停止主同步 mysql> stop slave; 3. 清数据 将mongo库数据清空 4. 杀主 ...

  4. [拓扑排序]Ordering Tasks UVA - 10305

    拓扑排序模版题型: John has n tasks to do.Unfortunately, the tasks are not independent and the execution of o ...

  5. css实现左侧固定宽,右侧自适应的7中方法

    一个面试会问的问题,如何实现两个盒子,左侧固定宽度,右侧自适应. 1.利用 calc 计算宽度的方法 css代码如下: .box{overflow: hidden;height: 100px;marg ...

  6. JAVA 中LinkedHashMap要点记录

    JAVA 中LinkedHashMap要点记录 构造函数中可能出现的几个参数说明如下: 1.initialCapacity 初始容量大小,使用无参构造方法时,此值默认是16 2.loadFactor ...

  7. 2981:大整数加法-poj

    2981:大整数加法 总时间限制:  1000ms 内存限制:  65536kB 描述 求两个不超过200位的非负整数的和. 输入 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0. 输 ...

  8. webpack之前端性能优化(史上最全,不断更新中。。。)

    最近在用webpack优化首屏加载性能,通过几种插件之后我们上线前后的速度快了一倍,在此就简单的分享下吧,先上个优化前后首屏渲染的对比图. 可以看到总下载时间从3800ms缩短到1600ms. 我们在 ...

  9. C#检测获取移动硬盘盘符

    最近做一个小工具,  C# 对 移动硬盘的检测, var arr = DriveInfo.GetDrives(); 得出的所有磁盘,发现对于移动硬盘,DriveType 不是 Removable 类型 ...

  10. 为什么选择Django?

    Web开发是Python语言应用领域的重要部分,也是工作岗位比较多的领域.如果你对基于Python的Web开发有兴趣,正打算开始学习使用Python做Web开发,或者已经是一个Web开发者有工作需要, ...