Nginx04-Nginx代理、反向代理实验、LNMP流程详解与排错思路

目录

  • 写在前面
  • Nginx04
    • LNMP流程详解
      • Nginx处理静态资源流程
      • Nginx处理动态资源流程
    • LNMP排错
      • Linux
      • Nginx
      • PHP
      • Mysql
    • Nginx 代理
      • 概述
        • 正向代理
        • 反向代理
        • 区别
      • 反向代理实验(Proxy模块)
        • 环境准备
        • front配置
        • lb01配置
        • 测试
        • 流程梳理
        • 总结

写在前面

这是Nginx第四篇,内容为LNMP流程详解、排错思路、Nginx代理等。
上篇笔记 Nginx03-动态资源和LNMP介绍与实验、自动索引模块、基础认证模块、状态模块

Nginx04

LNMP流程详解

Nginx处理静态资源流程

  • 用户与服务端的端口进行连接,报文携带请求方法请求页面http协议host等信息
  • 服务端接收到请求,到nginx后先匹配http区域(nginx主配置文件)
  • 根据用户请求的域名和配置文件的server_name进行匹配,匹配到了对应的域名,根据对应域名的配置进行处理(子配置文件
  • 根据用户请求的页面uri,结合站点目录,寻找到对应的文件,返回给客户端
  • 返回的报文携带http响应码请求文件等信息

Nginx处理动态资源流程

  • 用户与服务端的端口进行连接,报文携带请求方法请求页面http协议host等信息
  • 服务端接收到请求,到nginx后先匹配http区域(nginx主配置文件)
  • 根据用户请求的域名和配置文件的server_name进行匹配,匹配到了对应的域名,根据对应域名的配置进行处理(子配置文件
  • 根据用户请求的页面uri,发现是动态资源(location ~* .php$),nginx将该请求交由php-fpm处理,传递的是该文件绝对路径
    - fastcgi_pass 127.0.0.1:9000; 将请求传递给本机的哪个服务处理(php-fpm监听9000
    - fastcgi_index index.php;
    - fastcgi_param SCRIPT_FILENAME d o c u m e n t r o o t document_root documentrootfastcgi_script_name; 设置变量,$document_root是location中的root部分、$fastcgi_script_name是请求的文件uri
    - include fastcgi_params;
  • php-fpm进程根据收到的SCRIPT_FILENAME进行处理,将处理结果传回给nginx
  • nginx将php的结果通过响应报文传回给用户
  • 返回的报文携带http响应码请求文件等信息

LNMP排错

Linux

  • 检查防火墙
  • 检查selinux

Nginx

  • 检查端口ss -tunlp | grep nginx
  • 检查进程ps -ef | grep nginx
  • 检查配置nginx.conf conf.d/*.conf
  • 创建测试目录后curl测试

PHP

  • 创建测试文件
//站点目录下(root指定的路径)
cat testinfo.php
<?phpphpinfo();
?>
  • 访问测试文件
    在这里插入图片描述

注意:这个测试文件会记录很多信息,不能泄露,测试完即删除

Mysql

  1. mysql -u用户 -p密码 -h 数据库ip
  2. 书写页面测试php
<?php
//
数据库地址
$db_host='192.168.100.152';
//
数据库用户名
$db_user='test';
$db_pass='test';
//
数据库名字
$db_name='test';
$link_id=mysqli_connect($db_host,$db_user,$db_pass,$db_name);
if($link_id){echo "successful by oldboy lidao996! 库名字:$db_name 库用户:$db_user 库密码:$db_pass" ;
}else{echo "connection failed! 库名字:$db_name 库用户:$db_user 库密码:$db_pass" ;
}
?>
# nginx子配置文件
location ~* (testinfo|testmysq).php$ {allow 192.168.100.0/24;deny all; #仅允许内网访问fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;
}

Nginx 代理

概述

官网的文档:https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

正向代理

正向代理代表客户端向服务器发送请求。它通常位于客户端和互联网之间,帮助客户端访问受限资源或提高访问效率。类似跳板机的功能,转发流量。

  • 应用
    - 突破网络访问限制
    - 加速数据传输
    - 隐藏客户端真实IP地址

  • 举例
    - 网络加速
    - 私有代理服务器

反向代理

反向代理代表服务器接收来自客户端的请求。它通常位于服务器和互联网之间,帮助服务器管理和分配客户端请求,提高服务器安全性和效率。有点类似防火墙的功能,隔离内外。

  • 应用
    - 负载均衡
    - SSL加密和解密
    - 防止DDoS攻击

  • 举例
    - Nginx
    - Apache Traffic Server
    - AWS CloudFront

区别
特征正向代理反向代理
代理对象客户端服务器
位置客户端和互联网之间服务器和互联网之间
功能帮助客户端访问互联网帮助服务器管理和分配客户端请求
安全性隐藏客户端真实IP地址保护服务器免受恶意攻击
应用场景突破网络访问限制、加速数据传输负载均衡、SSL加密和解密、防止DDoS攻击
常见实现技术网络加速、私有代理服务器Nginx、Apache Traffic Server、AWS CloudFront

反向代理实验(Proxy模块)

环境准备
role    主机名
-------------
proxy   lb01
web     front域名:proxy.test.com
index:/app/code/proxy/index.html所需nginx模块:
location模块    虚拟站点
proxy模块   代理
upstream模块    负载均衡
front配置
  1. 子配置文件和站点文件
[root@front conf.d]# cat proxy.test.com.conf
server {listen 80;server_name proxy.test.com;root /app/code/proxy;error_log /var/log/nginx/proxy-error.log notice;access_log /var/log/nginx/proxy-access.log main;location / {index index.html;}
}
[root@front conf.d]# mkdir -p /app/code/proxy
[root@front conf.d]# echo proxy > /app/code/proxy/index.html
lb01配置
  1. 安装nginx
[root@lb01 ~]# cat /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true[root@lb01 ~]# yum install -y nginx[root@lb01 ~]# nginx -v
nginx version: nginx/1.26.1
  1. 创建子配置文件
[root@lb01 conf.d]# cat proxy.test.com.conf
#lb01
server {listen 80;server_name proxy.test.com;# 不用写站点目录error_log /var/log/nginx/proxy-error.log notice;access_log /var/log/nginx/proxy-access.log main;location / {#收到的所有uri转发给192.168.100.148proxy_pass http://192.168.100.148:80;#proxy_set_header 请求头字段 内容(变量)#转发proxy时,保留host头proxy_set_header Host $http_host;#转发proxy时,保留用户的真实ipproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}
测试
# 测试 访问的是lb01的ip
[root@lb01 conf.d]# curl -H Host:proxy.test.com http://192.168.100.153
proxy
流程梳理
  • 客户端访问proxy.test.com,访问的ip是lb01的ip

  • lb01收到用户发来的请求头,匹配子配置文件中的location,根据proxy模块转发到front主机

  • lb01在转发时,根据proxy模块的设置proxy_set_header Host,将host也保留转发到front
    - 报头可以携带X-Forwarded-For这个内容。这个内容不写默认传递是lb01ip,但可以通过proxy模块修改为用户的真实ipproxy_set_header X-Forwarded-For
    - 这个字段可以用两个变量:
    - $remote_addr 是客户端ip
    - $proxy_add_x_forwarded_for 是记录每个代理的ip,用于多层代理,类似多个$remote_addr

  • front收到请求后,匹配对应子配置文件,访问到站点目录的index.html,放回结果给lb01

  • lb01 收到结果后,再次转发给用户。

  • 整个请求过程,是两次http请求两次http响应

  • 不添加x_forwarded_for

[root@front conf.d]# cat /var/log/nginx/proxy-access.log
192.168.100.148 - - [09/Jun/2024:11:02:48 +0800] "GET / HTTP/1.1" 200 6 "-" "curl/7.61.1" "-"

在这里插入图片描述

  • 添加 x_forwarded_for
[root@front conf.d]# cat /var/log/nginx/proxy-access.log
192.168.100.153 - - [09/Jun/2024:17:05:30 +0800] "GET / HTTP/1.0" 200 6 "-" "curl/7.65.0" "192.168.100.1"

在这里插入图片描述

总结
  • 生产中建议proxy模块指定以下参数:
proxy_pass              服务端ip url如http://192.168.100.148:80
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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/850921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JWT不是为了授权而设计的

JWT不是为了授权而设计的&#xff0c;只是用作身份验证。 JWT 主要用于验证身份。由于大多数开发人员不会开发自己的身份验证解决方案&#xff0c;因此身份验证提供商的 SDK 可能会为您完成此操作。您最终从 JWT 获得的是身份本身。 这很好&#xff0c;因为 JWT 是可验证的用…

Follow Carl To Grow|【LeetCode】669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树

【LeetCode】669. 修剪二叉搜索树 题意&#xff1a;给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即&#xff0c;如果没有…

生成隐藏图

什么是隐藏图&#xff1f;请在手机版小红书上打开此链接双指放大图片观看。 本人还写了一个QT程序&#xff0c;可以通过傻瓜式操作生成隐藏图&#xff0c;有兴趣可以自行体验。 主要就是根据透明度展示原理去针对一个通道列方程&#xff0c;然后发现把前景图的色值全部映射到 1…

【Linux】 安装rz 和sz

在 Linux 系统中&#xff0c;rz 和 sz 是两个用于在本地计算机与远程计算机之间安全传输文件的命令行工具。它们是 lrzsz 包的一部分&#xff0c;通常用于通过 SSH 连接传输文件。 打开终端&#xff1a; 首先&#xff0c;打开你的 CentOS 机器上的终端。 执行sz 提示下面信息…

王学岗鸿蒙开发(北向)——————(七、八)ArkUi的各种装饰器

arts包含如下&#xff1a;1&#xff0c;装饰器 &#xff1b;2&#xff0c;组件的描述(build函数)&#xff1b;3&#xff0c;自定义组件(Component修饰的),是可复用的单元&#xff1b;4&#xff0c;系统的组件(鸿蒙官方提供)&#xff1b;等 装饰器的作用:装饰类、变量、方法、结…

下划线对象转驼峰

场景&#xff1a; Json的字符串转对象&#xff0c;并且字符串的的属性是下划线&#xff0c;对象的属性是驼峰 &#xff0c;用在对象中设置属性的方法实现。 方法&#xff1a; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMa…

ROS自带的OpenCV库和自己安装版本冲突问题现象及解决方法

文章目录 1. 问题现象1.1 编译过程警告1.2 程序运行报错 2. 分析问题原因3. 解决方法 1. 问题现象 1.1 编译过程警告 warning: lipopencv_improc.so.406, needed by /usr/local/lib/libopencv_xfeatures2d.so.4.6.0, may conflict with libopencv_imgproc.so.4.21.2 程序运行…

操作系统入门系列-MIT6.828(操作系统工程)学习笔记(五)---- 操作系统的组织结构(OS design)

系列文章目录 操作系统入门系列-MIT6.S081&#xff08;操作系统&#xff09;学习笔记&#xff08;一&#xff09;---- 操作系统介绍与接口示例 操作系统入门系列-MIT6.828&#xff08;操作系统工程&#xff09;学习笔记&#xff08;二&#xff09;----课程实验环境搭建&#x…

【机器人和人工智能——自主巡航赛项】进阶篇

文章目录 案例要求创建地图rviz仿真 保存地图坐标点定位识别训练主逻辑理解语音播报模块匹配二维码识别多点导航讲解视频其余篇章 案例要求 创建地图 ./1-gmapping.sh 把多个launch文件融合在sh文件里面 rviz仿真 rviz是rose集成的可视化界面&#xff0c;查看机器人的各项数…

CPP初级:模板的运用!

目录 一.泛型编程 二.函数模板 1.函数模板概念 2.函数模板格式 3.函数模板的原理 三.函数模板的实例化 1.隐式实例化 2.显式实例化 3.模板参数的匹配原则 四.类模板 1.类模板的定义格式 2.类模板的实例化 一.泛型编程 泛型编程&#xff1a;编写与类型无关的通用代码…

vs2019 c++20规范 全局函数 ref 及模板类 reference_wrapper<_Ty> 的源码分析

这是个引用&#xff0c;可以包裹一个对象&#xff0c;相当于引用该对象&#xff0c;而不是在作为函数形参时产生值传递。因为模板 reference_wrapper<_Ty> 其实是封装了该对象的地址。下面以图示形式给出其重要的成员函数。模板其实都差不多&#xff0c;跟人也一样&#…

Linux | buildrootfs 添加mkfs.ext3/mkfs.ext4 支持

因个人需要&#xff0c;mkfs.ext3 但是项目中还没有这个命令 所以琢磨了半天 这里将其小记一下 在buildrootfsz中&#xff0c;需要将e2fsprogs 勾选上然后重新编译就好了 make menuconfig Target packages-> Filesystem and flash utilities-> e2fsprogs

WDF驱动开发-电源策略(二)

支持单组件设备呈现单个或多个功能性电源状态 驱动程序可以为组件定义一个或多个功能电源状态&#xff0c;并注册电源管理框架 (PoFx) 在组件的 Fx 状态更改或其活动/空闲条件更改时调用的回调函数。 从 UMDF 版本 2.0 开始&#xff0c;单组件设备的 UMDF 驱动程序可以定义单个…

23种设计模式——创建型模式

设计模式 文章目录 设计模式创建型模式单例模式 [1-小明的购物车](https://kamacoder.com/problempage.php?pid1074)工厂模式 [2-积木工厂](https://kamacoder.com/problempage.php?pid1076)抽象⼯⼚模式 [3-家具工厂](https://kamacoder.com/problempage.php?pid1077)建造者…

JVMの静、动态绑定异常捕获JIT即时编译

在说明静态绑定和动态绑定之前&#xff0c;我们首先要了解在字节码指令的层面&#xff0c;JVM是如何调用方法的&#xff1a; 例如我有以下的代码&#xff0c;很简单就是在main方法中调用了另一个静态方法&#xff1a; public class MethodTest {public static void main(Strin…

详细说说机器学习在交通领域的应用

机器学习在交通领域的应用广泛而深入&#xff0c;以下是对其应用的详细归纳和分点表示&#xff1a; 自动驾驶技术&#xff1a; 自动驾驶技术是机器学习在交通领域中最具代表性的应用之一。通过大量数据的训练&#xff0c;自动驾驶车辆能够在不同的交通环境和场景中完成智能化的…

论文阅读——MIRNet

项目地址&#xff1a; GitHub - swz30/MIRNet: [ECCV 2020] Learning Enriched Features for Real Image Restoration and Enhancement. SOTA results for image denoising, super-resolution, and image enhancement.GitHub - soumik12345/MIRNet: Tensorflow implementation…

结构化查询语言SQL

SQL SQL 是 Structure Query Language(结构化查询语言)的缩写,它是使用关系模型的数据库应用语言,由 IBM 在 20 世纪 70 年代开发出来,作为 IBM 关系数据库原型 System R 的原型关系语言,实现了关系数据库中的信息检索。 SQL 分类 SQL是结构化查询语言(Structure Query Lang…

数据库(29)——子查询

概念 SQL语句中嵌套SELECT语句&#xff0c;称为嵌套查询&#xff0c;又称子查询。 SELECT * FROM t1 WHERE column1 (SELECT column1 FROM t2); 子查询外部语句可以是INSERT/UPDATE/DELETE/SELECT的任何一个。 标量子查询 子查询返回的结果是单个值&#xff08;数字&#xff…

C语言指针与数组的区别

在C语言中&#xff0c;指针和数组虽然在很多情况下可以互换使用&#xff0c;但它们在概念上和行为上存在一些区别。下面详细解释这些区别&#xff1a; ### 数组 1. **固定大小**&#xff1a;数组在声明时必须指定大小&#xff0c;这个大小在编译时确定&#xff0c;之后不能改…