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. [转载] Bitmap的秘密

    转载自http://www.infoq.com/cn/articles/the-secret-of-bitmap/ 之前已经参加过几次QCon峰会,不过今年QCon 2014 上海峰会对我来说比较特别 ...

  2. CLR类型设计之类型之常量和字段

             前言 孔子说:温故而知新,可以为师矣.所以对于学习过的知识要多复习,并且每一次复习都要尽可能的去扩展,而不是书本上的几句理论知识.很多人都喜欢分享自己的学习内容,记录下生活的点点滴滴 ...

  3. SpringMVC 视图解析器

    SpringMVC 视图解析器 还记得SpringMVC 快速入门中,dispatcher-servlet.xml 配置的视图解析器么.它是SpringMVC 的核心知识点.本章节比较简单,明白视图解 ...

  4. 跨域请求cookie获取与设置问题

    描述:最近做项目遇到了cookie的问题,项目为前后端分离项目,前台有分外网IP(A外)和内网IP(A内),后台服务只有一个内网IP(B内). 现象:当我前台异步请求发送给后台的时候,后台并不能获取到 ...

  5. Java之多态

    一.多态 1.含义 一种类型,呈现多种状态.主要关注类多态.方法多态. 2.多态的前提:继承 使用父类引用指向子类对象: Animal a1 = new Cat(): Object a1 = new ...

  6. 【深度学习系列】用PaddlePaddle和Tensorflow实现AlexNet

    上周我们用PaddlePaddle和Tensorflow实现了图像分类,分别用自己手写的一个简单的CNN网络simple_cnn和LeNet-5的CNN网络识别cifar-10数据集.在上周的实验表现 ...

  7. 【转】Swig 使用指南

    原文链接:https://www.cnblogs.com/elementstorm/p/3142644.html 如何使用 API swig.init({ allowErrors: false, au ...

  8. JavaWeb框架_Struts2_(七)----->文件的上传和下载

    这个章节是Struts2框架应用最广泛的三个版块(上传下载.国际化.校验输入)之一,所以这一版块的学习还蛮重要的. 1. 章节目录 Struts2文件上传 单文件上传 拦截器实现文件过滤 文件上传常量 ...

  9. HDU1532 Drainage Ditches SAP+链式前向星

    Drainage Ditches Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  10. 第三节:Creating API Endpoints (创建API路由)

    对于这篇文章的标题,其实,直译就是创建api端点.但是,真的很难懂,我还是写为API路由吧.每篇,文章,我都会全部去进行实践操作,力求写一个好点的教程. 本文英文地址-->https://git ...