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,可以共享
CentOS 7 学习(二) 配置Nginx反向代理的更多相关文章
- 如何在 CentOS 7 用 cPanel 配置 Nginx 反向代理
导读 Nginx 是最快和最强大的 Web 服务器之一,以其高性能和低资源占用率而闻名.它既可以被安装为一个独立的 Web 服务器,也可以安装成反向代理 Web 服务器.在这篇文章,我将讨论在安装了 ...
- Linux 笔记 - 第二十章 配置 Nginx 反向代理和负载均衡
一.简介 由于 Nginx 的反向代理和负载均衡功能经常被提及,所以将这两个功能单独提出来进行讲解. Nginx 其实仅仅是作为 Nginx Proxy 反向代理使用的,因为这个反向代理功能表现的效果 ...
- 配置LANMP环境(7)-- 配置nginx反向代理,与配置apache虚拟主机
一.配置nginx反向代理 1.修改配置文件 vim /etc/nginx/nginx.conf 在35行http下添加一下内容: include /data/nginx/vhosts/*.conf; ...
- 为docker私有registry配置nginx反向代理
公司的Docker私有registry已经搭建好了,用官方的registry image很容易就搭建好了.现在就是要用nginx的反向代理把它放出来,以便在外网可以访问. 我的上一篇blog 讲了如何 ...
- 使用SSL配置Nginx反向代理的简单指南
反向代理是一个服务器,它接收通过Web发出的请求,即http和https,然后将它们发送到后端服务器(或服务器).后端服务器可以是单个或一组应用服务器,如Tomcat,wildfly或Jenkins等 ...
- Centos 7.6配置nginx反向代理,直接yum安装
一,实验介绍 利用三台centos7虚拟机搭建简单的nginx反向代理负载集群, 三台虚拟机地址及功能介绍 192.168.2.76 nginx负载均衡器 192.168.2.82 web ...
- Centos 7.6配置nginx反向代理负载均衡集群
一,实验介绍 利用三台centos7虚拟机搭建简单的nginx反向代理负载集群, 三台虚拟机地址及功能介绍 192.168.2.76 nginx负载均衡器 192.168.2.82 web ...
- Centos 7配置nginx反向代理负载均衡集群
一,实验介绍 利用三台centos7虚拟机搭建简单的nginx反向代理负载集群, 三台虚拟机地址及功能介绍 192.168.2.76 nginx负载均衡器 192.168.2.82 web ...
- node项目发布+域名及其二级域名配置+nginx反向代理+pm2
学习node的时候也写了一些demo.但是只是限于本地测试,从来没有发布.今天尝试发布项目. 需要准备的东西 node 项目:为了突出重点,说明主要问题.我只是拿express 写了很简单的demo. ...
随机推荐
- 设计模式的征途—11.外观(Facade)模式
在软件开发中,有时候为了完成一项较为复杂的功能,一个类需要和多个其他业务类交互,而这些需要交互的业务类经常会作为一个完整的整体出现,由于涉及的类比较多,导致使用时代码较为复杂,此时,特别需要一个类似服 ...
- python基础-------函数(二)
闭包函数与装饰器 一.闭包函数 闭包函数:函数内部定义函数,成为内部函数,该内部函数包含对外部作用域,而不是对全局作用域名字的引用那么该内部函数成为闭包函数 name='alex' # def fun ...
- percona_xtrabackup
原理 percona xtrabackup备份过程主要分为以下几点: 1.xtrabackup在启动时会记住LSN(log sequence number),然后复制所有的数据文件 2.xtrabac ...
- riot.js教程【六】循环、HTML元素标签
前文回顾 riot.js教程[五]标签嵌套.命名元素.事件.标签条件 riot.js教程[四]Mixins.HTML内嵌表达式 riot.js教程[三]访问DOM元素.使用jquery.mount输入 ...
- 【JDK1.8】JDK1.8集合源码阅读——TreeMap(二)
一.前言 在前一篇博客中,我们对TreeMap的继承关系进行了分析,在这一篇里,我们将分析TreeMap的数据结构,深入理解它的排序能力是如何实现的.这一节要有一定的数据结构基础,在阅读下面的之前,推 ...
- MFC中小笔记
主要记录下一些有啊没啊的MFC东西. 1.单文档 去掉 无标题:在玩的时候用于FindWindow(class,title) BOOL CMainFrame::PreCreateWindow(CREA ...
- openvpn技术实现客户端直接访问远程机器中docker内容器的实现与原理
传统开发中如果要从开发机中访问服务器中的docker中的服务可能可能需要如下方案: 利用docker run的-p属性直接映射端口到服务器中 优点:客户端直接访问服务器就可以访问到docker容器. ...
- Failed to load the JNI shared lib...
启动eclipse报错:Failed to load the JNI shared lib... 解决办法如下:保证JDK与eclipse相匹配 在同一台计算机中,如果JDK是32位的,那么eclip ...
- Mysql实现企业级数据库主从复制架构实战
场景 公司规模已经形成,用户数据已成为公司的核心命脉,一次老王一不小心把数据库文件删除,通过mysqldump备份策略恢复用了两个小时,在这两小时中,公司业务中断,损失100万,老王做出深刻反省,公司 ...
- Code Kata:大整数比较大小&大整数四则运算---加减法 javascript实现
大整数的四则运算已经是老生常谈的问题了.很多的库也已经包含了各种各样的解决方案. 作为练习,我们从最简单的加减法开始. 加减法的核心思路是用倒序数组来模拟一个大数,然后将两个大数的利用竖式进行运算. ...