目录

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.代理配置语法

  1. proxy_pass http://127.0.0.1:8080;

2.nginx代理与配置

1.web节点的配置:10.0.0.201

  1. [root@node2 conf.d]# cat proxy.oldboyedu.com.conf
  2. server {
  3. listen 80;
  4. server_name proxy.oldboyedu.com;
  5. root /code/proxy;
  6.  
  7. location / {
  8. index index.html;
  9. }
  10. }
  11. [root@node2 conf.d]# mkdir /code/proxy -p
  12. [root@node2 conf.d]# echo "node2...." >> /code/proxy/index.html
  13.  
  14. [root@node2 conf.d]# nginx -t
  15. [root@node2 conf.d]# systemctl reload nginx

2.代理节点的配置:10.0.0.100

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

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

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

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

1.node1-nginx配置

  1. [root@node1 conf.d]# cat /etc/nginx/conf.d/proxy.oldboyedu.com.conf
  2. server {
  3. listen 80;
  4. server_name proxy.oldboyedu.com;
  5. root /code/proxy;
  6.  
  7. location / {
  8. index index.html;
  9. }
  10. }
  11.  
  12. [root@oldboy-pythonedu ~]# mkdir /code/proxy -p
  13. [root@oldboy-pythonedu ~]# echo "node1...." > /code/proxy/index.html
  14. [root@oldboy-pythonedu ~]# systemctl reload nginx

2.node2-nginx配置

  1. [root@node2 conf.d]# cat /etc/nginx/conf.d/proxy.oldboyedu.com.conf
  2. server {
  3. listen 80;
  4. server_name proxy.oldboyedu.com;
  5. root /code/proxy;
  6.  
  7. location / {
  8. index index.html;
  9. }
  10. }
  11. [root@oldboy-pythonedu ~]# mkdir /code/proxy -p
  12. [root@oldboy-pythonedu ~]# echo "node2...." > /code/proxy/index.html
  13. [root@oldboy-pythonedu ~]# systemctl reload nginx

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

  1. # proxy: 10.0.0.100
  2. # 域名: proxy.oldboyedu.com
  3.  
  4. [root@proxy ~]# cat /etc/nginx/conf.d/proxy_proxy.oldboyedu.com.conf
  5. upstream node {
  6. server 10.0.0.200:80;
  7. server 10.0.0.201:80;
  8. }
  9.  
  10. server {
  11. listen 80;
  12. server_name proxy.oldboyedu.com;
  13.  
  14. location / {
  15. proxy_pass http://node;
  16. proxy_set_header Host $http_host;
  17. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  18. proxy_http_version 1.1;
  19. }
  20. }
  21.  
  22. [root@proxy ~]# nginx -t
  23. [root@proxy ~]# systemctl reload nginx

Tip:加权轮询

  1. upstream node {
  2. server 10.0.0.200:80 weight=5;
  3. server 10.0.0.201:80 weight=1;
  4. }

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

  1. upstream node {
  2. ip_hash;
  3. server 10.0.0.200:80;
  4. server 10.0.0.201:80;
  5. }

对于ip_hash:

  优点:可以解决会话问题

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

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

实现步骤

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

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

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

在10.0.0.100进行blog配置

  1. upstream blog {
  2. server 10.0.0.200:80;
  3. server 10.0.0.201:80;
  4. }
  5.  
  6. server {
  7. listen 80;
  8. server_name blog.oldboyedu.com;
  9.  
  10. location / {
  11. proxy_pass http://blog;
  12. proxy_set_header Host $http_host;
  13. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  14. }
  15. }

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

Tip:查看访问日志的命令

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

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

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

  1. [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

  1. server {
  2. listen 80;
  3. server_name phpmyadmin.oldboyedu.com;
  4. root /code/phpmyadmin;
  5.  
  6. location / {
  7. index index.php;
  8. }
  9.  
  10. location ~ \.php$ {
  11. fastcgi_pass 127.0.0.1:9000;
  12. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  13. include fastcgi_params;
  14. }
  15. }
  16.  
  17. [root@oldboy-pythonedu ~]# systemctl reload nginx
  18. [root@oldboy-pythonedu ~]# unzip phpMyAdmin-5.0.3-all-languages.zip
  19. [root@oldboy-pythonedu ~]# mv phpMyAdmin-5.0.3-all-languages /code/phpmyadmin

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

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

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

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

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

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

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

  1. [root@proxy ~]# cat /etc/nginx/conf.d/proxy_phpadmin.oldboyedu.com.conf
  2. upstream php {
  3. server 10.0.0.200:80;
  4. server 10.0.0.201:80;
  5. }
  6.  
  7. server {
  8. listen 80;
  9. server_name phpmyadmin.oldboyedu.com;
  10.  
  11. location / {
  12. proxy_pass http://php;
  13. proxy_set_header Host $http_host;
  14. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  15. }
  16. }

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

  1. # 轮询一定会造成无法登陆成功.
  2.  
  3. # 可以采用ip_hash的方式解决.
  4. upstream php {
  5. ip_hash;
  6. server 10.0.0.200:80;
  7. server 10.0.0.201:80;
  8. }

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

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

8.1 安装Redis

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

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

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

8.3 配置应用节点接入Redis

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

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

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

day65: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. Windos环境用Nginx配置反向代理和负载均衡

    Windos环境用Nginx配置反向代理和负载均衡 引言:在前后端分离架构下,难免会遇到跨域问题.目前的解决方案大致有JSONP,反向代理,CORS这三种方式.JSONP兼容性良好,最大的缺点是只支持 ...

  8. Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...

  9. Nginx服务器 之反向代理与负载均衡

    一.反向代理 正向代理: 客户端要获取的资源就在服务器上,客户端请求的资源路径就是最终响应资源的服务器路径,这就是正向代理.正向代理的特点:就是我们明确知道要访问哪个网站地址. 反向代理: 客户端想获 ...

  10. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...

随机推荐

  1. ASP导出数据到excel遇到的一些问题

    一直用动易平台的ASP做新闻发布网站,直到现在才接触导出数据到Excel的问题,目的在于公司要统计各部门的投稿量,要做这么个东西,实现起来是挺简单的,但是第一次做,还是费了一些功夫的,特此记录一下 主 ...

  2. ES6特性整理

    ESMAScript6.0 ES6 兼容 IE10+ .Chrome.Firefox 要想兼容IE10以下的有两种方法: 用 babel 工具 borwer.js ,在 script 标签里添加 ty ...

  3. 在MyBatis中采用模糊查询变量的引用标志应当是$而不是#

    具体如下例: @Select("select count(*) from hy_stock where name like '%${keyword}%' or code like '%${k ...

  4. 使用java.io.RandomAccessFile更改文本文件的内容

    原文本内容: 2020-01-21 08:31:08.520 [main] INFO logbackCfg.App -秦时明月汉时关 2020-01-21 08:31:08.521 [main] ER ...

  5. 【Java/DateTime】用当前日期时间与确定日期时间比较,大于则执行某动作

    代码: package logbackCfg; import java.text.ParseException; import java.text.SimpleDateFormat; import j ...

  6. python应用 曲线拟合 02

    前情提要 CsI 闪烁体晶体+PD+前放输出信号满足: $U(t) = \frac{N_f\tau_p}{\tau_p-\tau_f} \left[ e^{-\frac{t}{\tau_p}}-e^{ ...

  7. Solr专题(一)手把手教你搭建Solr服务

    一.Solr是什么,能解决什么问题? Solr是一个高性能,采用Java开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展并对 ...

  8. Unity3D获得服务器时间/网络时间/后端时间/ServerTime,适合单机游戏使用

    说明 一些游戏开发者在做单机游戏功能时(例如:每日奖励.签到等),可能会需要获得服务端标准时间,用于游戏功能的逻辑处理. 问题分析 1.自己如果有服务器:自定义一个后端API,客户端按需请求就行了: ...

  9. C#开发PACS医学影像处理系统(六):加载Dicom影像

    对于一款软件的扩展性和维护性来说,上层业务逻辑和UI表现一定要自己开发才有控制权,否则项目上线之后容易被掣肘, 而底层图像处理,我们不需要重复造轮子,这里推荐使用fo-dicom,同样基于Dicom3 ...

  10. spring boot 在框架中注入properties文件里的值(Spring三)

    前一篇博客实现了打开第一个页面 链接:https://blog.csdn.net/qq_38175040/article/details/105709758 本篇博客实现在框架中注入propertie ...