目录

1.nginx代理

2.nginx代理与配置

3.nginx负载均衡调度多web节点(静态页面)

4.nginx负载均衡调度多应用节点(blog)

5.nginx_proxy + web应用节点(多台) + Redis会话保持

0.nginx流程图

0.5 项目运作示意图

1.nginx代理

1.nginx代理模式

正向代理:Science上网,共享上网

反向代理:企业

2.反向代理支持模式

http 用户请求 响应 JAVA
smtp  
websocket 用户可以请求 服务端响应 服务端可以推送数据
uwsgi Python
fastcgi PHP
https  

3.代理配置语法

proxy_pass http://127.0.0.1:8080;

2.nginx代理与配置

1.web节点的配置:10.0.0.201

[root@node2 conf.d]# cat proxy.oldboyedu.com.conf
server {
listen 80;
server_name proxy.oldboyedu.com;
root /code/proxy; location / {
index index.html;
}
}
[root@node2 conf.d]# mkdir /code/proxy -p
[root@node2 conf.d]# echo "node2...." >> /code/proxy/index.html [root@node2 conf.d]# nginx -t
[root@node2 conf.d]# systemctl reload nginx

2.代理节点的配置:10.0.0.100

# 1.关闭防火墙
[root@proxy ~]# systemctl disable firewalld
[root@proxy ~]# systemctl stop firewalld
[root@proxy ~]# setenforce 0 # 2.安装epel\nginx
[root@proxy ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@proxy ~]# yum install vim wget unzip nginx -y # 3.清理nginx.conf 无用的配置 # 4.将nginx加入开机自启\ 启动nginx
[root@proxy ~]# systemctl start nginx
[root@proxy ~]# systemctl enable nginx # 5.编写proxy配置文件:proxy_proxy.oldboyedu.com.conf
[root@proxy ~]# vim /etc/nginx/conf.d/proxy_proxy.oldboyedu.com.conf
server {
listen 80;
server_name proxy.oldboyedu.com; location / {
proxy_pass http://10.0.0.201; # 后端是什么端口根本不重要
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
}
} # 6.检查语法,重载服务
[root@proxy ~]# nginx -t
[root@proxy ~]# systemctl restart nginx

在用户请求代理中,抓包分析,提炼了几个参数

proxy_set_header Host $http_host;                                # 将用户请求的域名携带到后端
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 将用户的真实IP地址,携带到后端,后端有对应的变量解析结果
proxy_http_version 1.1; # 代理请求后端默认走http1.0, 可以调整为http1.1 长连接

3.nginx负载均衡调度多web节点(静态页面)

1.node1-nginx配置

[root@node1 conf.d]# cat /etc/nginx/conf.d/proxy.oldboyedu.com.conf
server {
listen 80;
server_name proxy.oldboyedu.com;
root /code/proxy; location / {
index index.html;
}
} [root@oldboy-pythonedu ~]# mkdir /code/proxy -p
[root@oldboy-pythonedu ~]# echo "node1...." > /code/proxy/index.html
[root@oldboy-pythonedu ~]# systemctl reload nginx

2.node2-nginx配置

[root@node2 conf.d]# cat /etc/nginx/conf.d/proxy.oldboyedu.com.conf
server {
listen 80;
server_name proxy.oldboyedu.com;
root /code/proxy; location / {
index index.html;
}
}
[root@oldboy-pythonedu ~]# mkdir /code/proxy -p
[root@oldboy-pythonedu ~]# echo "node2...." > /code/proxy/index.html
[root@oldboy-pythonedu ~]# systemctl reload nginx

3.通过nginx负载均衡进行轮询调度-->proxy-nginx配置

# proxy: 10.0.0.100
# 域名: proxy.oldboyedu.com [root@proxy ~]# cat /etc/nginx/conf.d/proxy_proxy.oldboyedu.com.conf
upstream node {
server 10.0.0.200:80;
server 10.0.0.201:80;
} server {
listen 80;
server_name proxy.oldboyedu.com; location / {
proxy_pass http://node;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
}
} [root@proxy ~]# nginx -t
[root@proxy ~]# systemctl reload nginx

Tip:加权轮询

upstream node {
server 10.0.0.200:80 weight=5;
server 10.0.0.201:80 weight=1;
}

Tip:ip_hash:固定将请求调度到某一个节点(session会话保存)

upstream node {
ip_hash;
server 10.0.0.200:80;
server 10.0.0.201:80;
}

对于ip_hash:

  优点:可以解决会话问题

  缺点:如果来源的都是同一个IP地址,则会造成某一个节点非常的繁忙,而其他的节点没有流量,造成负载不均衡的现象.

4.nginx负载均衡调度多应用节点(blog)

实现步骤

1.准备好wordpress两台应用节点

2.准备好edusoho两台应用节点

3.配置nginx负载均衡,调度

在10.0.0.100进行blog配置

upstream blog {
server 10.0.0.200:80;
server 10.0.0.201:80;
} server {
listen 80;
server_name blog.oldboyedu.com; location / {
proxy_pass http://blog;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

通过查看访问日志,即可看到轮询的效果

Tip:查看访问日志的命令

[root@python31-centos var]# tail -f /var/log/nginx/access.log

5.nginx_proxy + web应用节点(多台) + Redis会话保持

1.搭建好应用节点(所有节点保持一致) 10.0.0.200

[root@oldboy-pythonedu ~]# wget https://files.phpmyadmin.net/phpMyAdmin/5.0.3/phpMyAdmin-5.0.3-all-languages.zip

2.准备phpmyadmin的Nginx配置文件 10.0.0.200

server {
listen 80;
server_name phpmyadmin.oldboyedu.com;
root /code/phpmyadmin; location / {
index index.php;
} location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
} [root@oldboy-pythonedu ~]# systemctl reload nginx
[root@oldboy-pythonedu ~]# unzip phpMyAdmin-5.0.3-all-languages.zip
[root@oldboy-pythonedu ~]# mv phpMyAdmin-5.0.3-all-languages /code/phpmyadmin

3.配置phpmyadmin连接数据库地址 10.0.0.200

[root@oldboy-pythonedu ~]# cp /code/phpmyadmin/config.sample.inc.php /code/phpmyadmin/config.inc.php
[root@oldboy-pythonedu ~]# vim /code/phpmyadmin/config.inc.php
/* Server parameters */
$cfg['Servers'][$i]['host'] = '10.0.0.202';

4.授权session存储本地目录为进程的用户身份 10.0.0.200

[root@oldboy-pythonedu ~]# chown -R nginx.nginx /var/lib/php/session

5.部署node2节点的phpmyadmin, 需要将代码和nginx配置拷贝一份 10.0.0.201

[root@node2 code]# scp -rp root@10.0.0.200:/code/phpmyadmin /code/
[root@node2 code]# chown -R nginx.nginx /code/phpmyadmin/
[root@node2 code]# scp root@10.0.0.200:/etc/nginx/conf.d/phpadmin.oldboyedu.com.conf /etc/nginx/conf.d/
[root@node2 code]# chown -R nginx.nginx /var/lib/php/session/ [root@node2 code]# nginx -t
[root@node2 code]# systemctl reload nginx

6.为应用节点,接入负载均衡 10.0.0.201

[root@proxy ~]# cat /etc/nginx/conf.d/proxy_phpadmin.oldboyedu.com.conf
upstream php {
server 10.0.0.200:80;
server 10.0.0.201:80;
} server {
listen 80;
server_name phpmyadmin.oldboyedu.com; location / {
proxy_pass http://php;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

7.检查轮询是否会造成无法登陆情况, 配置IP_hash测试是否能正常登陆

# 轮询一定会造成无法登陆成功.

# 可以采用ip_hash的方式解决.
upstream php {
ip_hash;
server 10.0.0.200:80;
server 10.0.0.201:80;
}

8.采用Redis共享的方式来解决会话无法登陆的问题

注意!!!需要先将负载均衡恢复至轮询模式,然后在继续.

8.1 安装Redis 10.0.0.202

[root@node-mysql ~]# yum install redis -y
[root@node-mysql ~]# vim /etc/redis.conf # 添加本机的内网IP地址 ( 不要写错了 )
bind 127.0.0.1 10.0.0.202 [root@node-mysql ~]# systemctl enable redis
[root@node-mysql ~]# systemctl start redis
[root@node-mysql ~]# netstat -lntp | grep redis
tcp 0 0 10.0.0.202:6379 0.0.0.0:* LISTEN 10699/redis-server
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 10699/redis-server

8.2 通过其他的节点测试是否能正常访问Redis 10.0.0.202

[root@node2 ~]# yum install redis -y
[root@node2 ~]# redis-cli -h 10.0.0.202

8.3 配置应用节点接入Redis 10.0.0.202

# 1.将应用程序解析器连接至 Redis
[root@oldboy-pythonedu ~]# vim /etc/php.ini
[Session]
;session.save_handler = files #注释掉
session.save_handler = redis
session.save_path = "tcp://10.0.0.202:6379?weight=1&timeout=2.5" # 2.注释如下两行内容
[root@oldboy-pythonedu ~]# vim /etc/php-fpm.d/www.conf
;php_value[session.save_handler] = files
;php_value[session.save_path] = /var/lib/php/session # 3.重启php-fpm
[root@oldboy-pythonedu ~]# systemctl restart php-fpm

9.测试是否能正常登陆,然后检查浏览器中的session是否与redis中存储的session一致 10.0.0.202

[root@node-mysql ~]# redis-cli
127.0.0.1:6379> keys *
1) "python_key"
2) "PHPREDIS_SESSION:f0ad1e364f79a85bd93b46883403f6ec"

day65:Linux:nginx代理&nginx负载均衡的更多相关文章

  1. Nginx代理与负载均衡配置与优化

    Nginx代理 Nginx从0.7.48版本开始,支持了类似Squid的缓存功能.Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi_cache相关指令集构成,前者用于反 ...

  2. Nginx代理与负载均衡

    序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在上篇文章中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Nginx代理服务的 ...

  3. Nginx代理和负载均衡实验

    一.构建两个tomcat容器并启动 [root@localhost bin]# ps -ef|grep tomcat root : pts/ :: /usr/bin/java -Djava.util. ...

  4. 12.Nginx代理与负载均衡

    1.什么是代理? 代为办理 --> 代理 2.Nginx正向代理.反向代理 正向代理: --> 上网 | 路由器替代 反向代理: --> 正向与反向代理的区别: 区别在于形式上服务的 ...

  5. nginx代理,负载均衡

    #代理,如:通过代理实现访问百度(单个机器)创建vim proxy.conf内容如下server { listen 80; server_name www.baidu.com; location / ...

  6. 使用nginx代理weblogic负载方案

    之前一直用apache来做weblogic的前端,由于nginx对静态内容的出色性能,不得不转投nginx.这里就不 再写weblogic的安装了. 安装nginx nginx需要pcre做支持,一般 ...

  7. linux 常用命令 和 nginx(反响代理、负载均衡)安装和配置

    (1)linux常用命令 [1]在光标前输入内容:i [2]删除输入方式下所输入的文本:Ctrl+u  [3]文件保存退出:wq [4]文件不保存退出:q [5]文件强制退出:q! [6]常规删除文件 ...

  8. Linux实战教学笔记30:Nginx反向代理与负载均衡应用实践

    1.1 集群简介 简单地说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器.这些服务器之间可 ...

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

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

  10. Linux服务之nginx服务篇三(反向代理、负载均衡)

    一.Nginx实现反向代理 概念 反向代理:在收到客户端请求之后,会修目标IP地址和端口 正向代理:在收到客户端请求之后,会修源IP地址和端口 上游服务器:代理服务器后端的哪些真正给客户端提供服务的节 ...

随机推荐

  1. Call API URL连接拼参数的方法

    void TestNTFD()        {            try            {                try                {             ...

  2. C#/.Net 部分缩写

    CTS(Common Type System):通用类型系统:指定最基本类型便于.Net Framework的各种语言之间进行交互. CLR(Common Language Runtime):.Net ...

  3. 工作随笔1-从slave备份,恢复成新得从库

    innobackupex --slave-info --safe-slave-backup --no-timestamp tmp_lastinnobackupex --apply-log tmp_la ...

  4. 第一次作业:https://edu.cnblogs.com/campus/qdu/DS2020/homework/11165

    大家好,我是信息与计算科学一班的刘宝龙.爱好是看动漫,玩游戏,听音乐,不喜欢户外运动,是一个二次元宅男.但是喜欢交朋友,希望能与班里所有的同学建立良好的同学关系. 自己的强项是与人的交流与沟通,还有遇 ...

  5. AcWing 66. 两个链表的第一个公共结点 (2012算法题)

    题目: 输入两个链表,找出它们的第一个公共结点. 当不存在公共节点时,返回空节点. 数据范围 链表长度 [1,2000]. 保证两个链表不完全相同,即两链表的头结点不相同. 样例  给出两个链表如下所 ...

  6. NOIP2015普及组

    T1 金币 很简单的题,控制天数这个变量 #include<iostream> #include<cstring> #include<cmath> #include ...

  7. TCP 为什么是 三次 握手 不是两次 不是四次

    ​ 为什么不是两次 (1) 防止 历史 旧数据 连接 客户端连续发送多次 SYN 建⽴连接的报⽂,在⽹络拥堵等情况下: ● ⼀个「旧 SYN 报⽂」⽐「最新的 SYN 」 报⽂早到达了服务端: ● 那 ...

  8. QT网络编程【一】

    1.QUdpSocket头文件无法识别怎么解决? 问题原因:qmake没有添加network的模块.在工程配置文件中添加配置即可. 2.选择c++的socket库还是QUdpSocket? 3.同样的 ...

  9. C语言声明与定义的区别

    转自:https://blog.csdn.net/gatieme/article/details/50640424 C++程序通常由许多文件组成,为了让多个文件访问相同的变量,C++区分了声明和定义. ...

  10. ASP.NET在Repeater中使用Button控件报错

    普通Button在这里会报错,小编找了一天也没有解决这个问题, 这里可以换做LinkButton或者ImageButton替换普通的Button