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. 设计模式的征途—11.外观(Facade)模式

    在软件开发中,有时候为了完成一项较为复杂的功能,一个类需要和多个其他业务类交互,而这些需要交互的业务类经常会作为一个完整的整体出现,由于涉及的类比较多,导致使用时代码较为复杂,此时,特别需要一个类似服 ...

  2. python基础-------函数(二)

    闭包函数与装饰器 一.闭包函数 闭包函数:函数内部定义函数,成为内部函数,该内部函数包含对外部作用域,而不是对全局作用域名字的引用那么该内部函数成为闭包函数 name='alex' # def fun ...

  3. percona_xtrabackup

    原理 percona xtrabackup备份过程主要分为以下几点: 1.xtrabackup在启动时会记住LSN(log sequence number),然后复制所有的数据文件 2.xtrabac ...

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

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

  5. 【JDK1.8】JDK1.8集合源码阅读——TreeMap(二)

    一.前言 在前一篇博客中,我们对TreeMap的继承关系进行了分析,在这一篇里,我们将分析TreeMap的数据结构,深入理解它的排序能力是如何实现的.这一节要有一定的数据结构基础,在阅读下面的之前,推 ...

  6. MFC中小笔记

    主要记录下一些有啊没啊的MFC东西. 1.单文档 去掉 无标题:在玩的时候用于FindWindow(class,title) BOOL CMainFrame::PreCreateWindow(CREA ...

  7. openvpn技术实现客户端直接访问远程机器中docker内容器的实现与原理

    传统开发中如果要从开发机中访问服务器中的docker中的服务可能可能需要如下方案: 利用docker run的-p属性直接映射端口到服务器中 优点:客户端直接访问服务器就可以访问到docker容器. ...

  8. Failed to load the JNI shared lib...

    启动eclipse报错:Failed to load the JNI shared lib... 解决办法如下:保证JDK与eclipse相匹配 在同一台计算机中,如果JDK是32位的,那么eclip ...

  9. Mysql实现企业级数据库主从复制架构实战

    场景 公司规模已经形成,用户数据已成为公司的核心命脉,一次老王一不小心把数据库文件删除,通过mysqldump备份策略恢复用了两个小时,在这两小时中,公司业务中断,损失100万,老王做出深刻反省,公司 ...

  10. Code Kata:大整数比较大小&大整数四则运算---加减法 javascript实现

    大整数的四则运算已经是老生常谈的问题了.很多的库也已经包含了各种各样的解决方案. 作为练习,我们从最简单的加减法开始. 加减法的核心思路是用倒序数组来模拟一个大数,然后将两个大数的利用竖式进行运算. ...