1.nginx代理
1.1代理概述
代理: 外卖/中介/中间商. 用户无法直接做某些事情,通过中介进行处理.这个中介就是代理.
用户---代理---WEB节点,后面只有一个节点,一般使用的是ngx代理功能即可,后面如果是集群需要使用ngx负载均衡功能
1.2代理分类
代理分类 | 方向 | 应用 |
---|
正向代理 | 用户(服务器)----代理---外部(某网站) | 服务器通过代理实现共享上网/访问某个网站. |
反向代理 | 用户(app/浏览器)-----代理------ 网站服务器 | 给网站设置个统一入口,后面是网站集群(可以使用负载均衡功能) |


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;
}
}