1.nginx代理

1.1代理概述

代理: 外卖/中介/中间商. 用户无法直接做某些事情,通过中介进行处理.这个中介就是代理.
用户---代理---WEB节点,后面只有一个节点,一般使用的是ngx代理功能即可,后面如果是集群需要使用ngx负载均衡功能

1.2代理分类

代理分类方向应用
正向代理用户(服务器)----代理---外部(某网站)服务器通过代理实现共享上网/访问某个网站.
反向代理用户(app/浏览器)-----代理------ 网站服务器给网站设置个统一入口,后面是网站集群(可以使用负载均衡功能)

image-20240617092815797.png

image-20240617092824339.png

1.3代理的自配子文件参考

1.3.1web服务器配置文件

server {
 listen 80;
 server_name proxy.oldboylinux.cn;
 root /app/code/proxy;
 error_log /var/log/nginx/proxy_error.log notice;
 access_log /var/log/nginx/proxy_access.log main;
 location / {
   indx index.html; 
 }

1.3.2负载均衡服务器配置文件

server {
 listen 80
 server_name proxy.oldboylinux.cn;
 error_log /var/log/nginx/proxy-error.log notice; 
 access_log /var/log/nginx/proxy-acess.log main; 
 location / {
   proxy_pass http:Վˌ10.0.0.7:80 ; 
   proxy_set_header Host $http_host;
 }

1.3.3web有多个虚拟主机故障案例

web服务器有多个虚拟主机的时候,通过代理访问web出现异常.访问的不是我们想要的虚拟主机.
原因:
  代理向后端web节点发出请求的时候,请求头中的Host,被修改成ip地址形式了.
   相当于代理通过ip地址访问web服务器,只显示默认虚拟主机
   
 解决:
    方向:目标就是修改,代理到web的请求头,Host部分.
     proxy_set_header Host $http_host;
     proxy_set_header Host "proxy.oldboylinux.cn";

1.3.4web记录用户真实ip地址

server {
 listen 80;
 server_name proxy.oldboylinux.cn;
 error_log /var/log/nginx/proxy-error.log notice; 
 access_log /var/log/nginx/proxy-acess.log main; 
 location / {
   proxy_pass http:Վˌ10.0.0.7:80 ; 
    #代理Վ---节点发出请求,修改请求头.
    #proxy_set_header 请求头字段 内容(变量);
   proxy_set_header Host $http_host; 
    #proxy_set_header X-Forwarded-For 取出客户端ip地
址
   proxy_set_header X-Forwarded-For 
$proxy_add_x_forwarded_for;
}}




生产建议
proxy_set_header Host $http_host;
proxy_set_header   X-Real-IP    $remote_addr;
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;

2.nginx负载均衡

2.1负载均衡选型

选型选择
硬件F5,A10
软件Nginx,Tengine,Openresty(内置lua),Haproxy(专业负载),LVS(高性能)
公有云服务SLB,CLB

2.2负载均衡基础 配置

##upstream模块的upstream指令.
##创建1个池塘(分组),存放主机.
##upstream创建池塘,proxy_pass数据丢向池塘
upstream cfg_pools {
 server 10.0.0.7:80;
 server 10.0.0.8:80;
}
server {
 listen 80;
 server_name cfg.oldboylinux.cn;
 error_log /var/log/nginx/cfg-error.log notice;
 access_log /var/log/nginx/cfg-access.log main;
 location / {
   proxy_pass http:Վˌcfg_pools;
   proxy_set_header Host $http_host;
   proxy_set_header X-Real-Ip $remote_addr;
   proxy_set_header X-Forwarded-For 
$proxy_add_x_forwarded_for;
}}

3.会话保持

3.1cookie vs session

技术点共同点区别其他
cookie存放用户的信息,登录信息存放在客户端浏览器服务器给客户端响应,进行设置set-cookie,未来再次访问携带者cookie访问服务端
session存放用户的信息,登录信息存放服务端(文件,数据端(文件,数据浏览器cookie与服务端的session对应

3.2会话保持方案

登录状态写入cookie中.(wordpress)
cookie+session方式 + 统一存放session服务器(会话保持服务器)
通过认证服务实现Oauth 2.0(使用token方式)
ip_hash方法(讲解负载均衡轮询算法)

3.3会话保持案例

3.3.1db准备phpmyadmin的用户

grant all on *.* to 'phpmyadmin'@'172.16.1.%' identified by '1';

3.3.2部署nginx 和php

参考博客http://120.26.93.99/archives/php7.2an-zhuang


#手动创建连接数据库cp config.sample.inc.php config.inc.php
grep -wn host config.inc.php
30:$cfg['Servers'][$i]['host'] = '172.16.1.51';的配置文件

chown -R www.www /var/lib/php/session
ll -d /var/lib/php/session

3.3.3部署redis服务

yum install -y redis
修改/etc/redis.conf 
bind 127.0.0.1 172.16.1.51   #172.16.1.51 本地网卡的
ip.
systemctl enable Վʔnow redis
ss -lntup |grep redis

3.3.4lb配置文件

[root@lb01 /etc/nginx/conf.d]# cat 
phpmyadmin.oldboylinux.cn.conf 
upstream phpmyadmin_pools {
 server 10.0.0.7:80;
 server 10.0.0.8:80; 
}
server {
   listen 80;
   server_name phpmyadmin.oldboylinux.cn; 
   #error_log
   #access_log 
   location / {
     proxy_pass http:Վˌphpmyadmin_pools;
     proxy_set_header Host $http_host;
     proxy_set_header X-Forwarded-For 
$proxy_add_x_forwarded_for;
   }

3.3.5php配置文件指定会话存放位置

创建新的子配置文件
通知php指定会话保持位置:redis tcp://172.16.1.51:6379
修改/etc/php-fpm.d/www.conf
cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/session.conf

php_value[session.save_handler] = redis
php_value[session.save_path]    = 
tcp:Վˌ172.16.1.51:6379


具体内容如下
[session]
user = www
group = www
listen = 127.0.0.1:9001
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/wwwerror.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = redis
php_value[session.save_path]    = 
tcp:Վˌ172.16.1.51:6379
php_value[soap.wsdl_cache_dir]  = 
/var/lib/php/wsdlcache


修改nginx配置 admin转发到9001端口的php处理
server {
 listen 80;
 server_name admin.oldboylinux.cn; 
 root /app/code/admin; 
 error_log /var/log/nginx/admin-error.log notice ; 
 access_log /var/log/nginx/admin-access.log main;
  
 location / {
   index index.php;
 }
 location ~* \.php$ {
 #传递给php
   fastcgi_pass   127.0.0.1:9001;
   fastcgi_index index.php;
   fastcgi_buffering on;
   fastcgi_buffers 64 64k;
    #下面内容需要修改
    #fastcgi_param SCRIPT_FILENAME 
/app/code/admin$fastcgi_script_name;
   fastcgi_param SCRIPT_FILENAME 
$document_root$fastcgi_script_name;
   include       fastcgi_params;
 }
}