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基础(三)----字符编码以及文件处理

      字符编码与文件处理 一.字符编码 由字符翻译成二进制数字的过程   字符--------(翻译过程)------->数字   这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之 ...

  2. 浅谈Maven

    最近的有用到Maven 所以就大概跟大家谈一下Maven 1什么是Maven? Maven我个人的理解就是项目架包管理 通俗易懂的来说就是管理配置你项目中的所有jar包的 废话不多说 Maven去ht ...

  3. 给GridControl中的某列添加图片

    要让GridControl的某列显示图片只需要数据源中有图片就可以正确显示 1.给DataSet添加一列,格式为image ds.Tables[].Columns.Add("SIGN&quo ...

  4. vim操作命令

    一,命令模式下 文件顶部: gg 文件底部: G 删除当前行:dd 删除当前行,并进入INSERT模式: cc 取消删除:u

  5. MySql的虚拟机和Xshell5的连接过程

    给大家介绍一下虚拟机和Xshell5连接的基本配置1.安装虚拟机,跟着提示一步一步安装即可,注意添加镜像文件,虚拟机就完成了.2.下载一个Xshell5,安装好之后.要修改虚拟机的网卡状态    1) ...

  6. Python 函数返回值

    本章详细介绍 返回值: 0x 00 返回值简介 0x 01 指定返回值与隐含返回值 0x 02 return 语句位置与多条 return 语句 0x 03 返回值类型 0x 04 函数嵌套 0x 0 ...

  7. [最短路][模版]P1346 电车

    题目描述 在一个神奇的小镇上有着一个特别的电车网络,它由一些路口和轨道组成,每个路口都连接着若干个轨道,每个轨道都通向一个路口(不排除有的观光轨道转一圈后返回路口的可能).在每个路口,都有一个开关决定 ...

  8. 七、Hadoop学习笔记————调优之Hadoop参数调优

    dfs.datanode.handler.count默认为3,大集群可以调整为10 传统MapReduce和yarn对比 如果服务器物理内存128G,则容器内存建议为100比较合理 配置总量时考虑系统 ...

  9. ABAP 7.52 中的Open SQL新特性

    S/4 HANA 1709 已经在几个月前发布,随之而来的是ABAP 7.52. 本文翻译了更新文档中有关Open SQL的部分 本文链接:http://www.cnblogs.com/hhelibe ...

  10. 2715:谁拿了最多奖学金-poj

    总时间限制:  1000ms 内存限制:  65536kB 描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期末平均成 ...