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.rhkb.cn/news/345608.html

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

相关文章

适用于电脑的 5 大嗨格式数据恢复替代方案

嗨格式数据恢复是有一定知名度的 Windows 和 Mac 恢复程序&#xff0c;旨在恢复格式化、删除和丢失的图片、视频和音频。该应用程序支持多种文件格式以及相机 RAW 图像。最好的部分&#xff1f;它的预览功能可以在恢复照片和其他媒体文件之前检查和验证它​​们——这可以节省大…

温度传感器十大品牌

温度传感器品牌排行榜-十大热电偶品牌-热敏电阻品牌排行-Maigoo品牌榜

【设计模式】行为型设计模式之 备忘录模式(快照模式)

介绍 备忘录应用场景明确并且有限&#xff0c;一般用来数据的防丢失、撤销和恢复。对大对象的备份和恢复&#xff0c;备忘录模式能有效的节省时间和空间开销。 定义 备忘录模式&#xff1a;也称为快照模式&#xff0c;在不违背封装原则的前提下&#xff0c;捕获一个对象的内…

【qt】启动窗口的玩法

启动窗口的玩法 一.应用场景二.界面类设计窗口三.main中创建四.窗口显示标识五.功能实现1.读取注册表2.md5加密3.登录实现4.保存注册表5.功能演示 六.鼠标事件拖动窗口1.找到鼠标事件的函数2.点击事件3.移动事件4.释放事件 七.总结 一.应用场景 一般我们的软件和应用都会一个登…

线性代数|机器学习-P11方程Ax=b求解研究

文章目录 1. 变量数和约束条件数大小分类2. 最小二乘法和Gram-schmidt变换2.1 Gram-schmidt变换2.2 最小二乘法2.2.1 损失函数-Lasso 和regression2.2.2 损失函数-Lasso2.2.3 损失函数-regression2.2.4 Regression岭回归-矩阵验证2.2.5 Regression岭回归-导数验证 3. 迭代和随机…

CS1061 “HtmlHelper”未包含“Partial”的定义,并且找不到可接受第一个“HtmlHelper”类型参数的可访问扩展方法“Partial”

严重性 代码 说明 项目 文件 行 禁止显示状态 错误 CS1061 “HtmlHelper”未包含“Partial”的定义&#xff0c;并且找不到可接受第一个“HtmlHelper”类型参数的可访问扩展方法“Partial”(是否缺少 using 指令或程序集引用?) 14_Views_Message_E…

【车载开发系列】MCU选型

【车载开发系列】MCU选型 【车载开发系列】MCU选型 【车载开发系列】MCU选型一. 重要概念二. MCU选型的风险风险1风险2 三. MCU选型要点四. MCU选型维度五. MCU 选型需要考虑的因素1&#xff09;ROM/RAM2&#xff09;速度/主频3&#xff09;分析外设需求4&#xff09;工作电压(…

算法家族之一——二分法

目录 算法算法的打印效果如果算法里的整型“i”为1如果算法里的整型“i”为11 算法的流程图算法的实际应用总结 大家好&#xff0c;我叫 这是我58&#xff0c;现在&#xff0c;请看下面的算法。 算法 #define _CRT_SECURE_NO_WARNINGS 1//<--预处理指令 #include <stdi…

html--万年历

<!DOCTYPE html> <html lang"zh_CN"><head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8" /><meta charset"utf-8" /><title>万年历</title><link rel"styles…

压力测试-性能指标-Jmeter使用-压力测试报告

文章目录 1.压测目的2.性能指标3.Jmeter3.1Jmeter使用3.1.1 运行Jmeter3.1.2 添加线程组3.1.3设置HTTP请求3.1.4 设置监视器 3.2 查看Jmeter压测结果3.2.1 查看结果树3.2.2 查看汇总报告3.2.3 查看聚合报告3.2.4 查看汇总图 1.压测目的 内存泄漏&#xff1a;OOM&#xff0c;重…

Llama模型家族之Stanford NLP ReFT源代码探索 (四)Pyvene论文学习

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

【嵌入式】波特率9600,发送8个字节需要多少时间,如何计算?

问题&#xff1a; 波特率9600&#xff0c;发送 01 03 00 00 00 04 44 09 (8字节) 需要多少时间&#xff0c;如何计算&#xff1f; 在计算发送数据的时间时&#xff0c;首先要考虑波特率以及每个字符的数据格式。对于波特率9600和标准的UART数据格式&#xff08;1个起始位&…

彩虹易支付最新版源码

源码简介 彩虹易支付最新版源码&#xff0c;更新时间为5.1号 2024/05/01&#xff1a; 1.更换全新的手机版支付页面风格 2.聚合收款码支持填写备注 3.后台支付统计新增利润、代付统计 4.删除结算记录支持直接退回商户金额 安装环境 1.PHP版本>7.4 2.Mysql数据库 安装教…

C++ Qt实现http url启动本地应用程序

更多Qt文章,请访问《深入浅出C++ Qt开发技术专栏》:https://blog.csdn.net/yao_hou/category_9276099.html 文章目录 1、注册自定义协议2、编写web页面3、编写C++应用程序我们在使用腾讯会议时经常会通过http链接打开本地的腾讯会议,例如下图: 打开会议发起人给的链接,会出…

⾃动化批量管理-Ansible

目录 一、ansible 简介 自动化工具选择 &#xff08;了解&#xff09;​编辑 1、ansible 是什么&#xff1f; 2、ansible 特点 3、ansible 架构图 二、ansible 任务执行 1、ansible 任务执行模式 2、ansible 执行流程 3、ansible 命令执行过程 三、ansible 配置详解 …

【iOS】UI学习——登陆界面案例、照片墙案例

文章目录 登陆界面案例照片墙案例 登陆界面案例 这里通过一个登陆界面来复习一下前面学习的内容。 先在接口部分定义两个UILabel、两个UITextField、两个UIButton按键&#xff1a; #import <UIKit/UIKit.h>interface ViewController : UIViewController {UILabel* _lb…

基于AT89C51单片机的红外防盗报警器设计

第一章 绪论1.1 选题背景 随着社会科学的不断进步和发展,人们生活水平得到很大的提高,对个人私有财产的保护越来越重视,因而对于防盗的措施提出了更高的要求。本设计就是为了满足现代生活防盗的需要而设计的应用于家庭、车库、仓库和保险柜等处进行防盗监控的无线防盗报警装…

【RAG入门教程03】Langchian框架-文档加载

Langchain 使用文档加载器从各种来源获取信息并准备处理。这些加载器充当数据连接器&#xff0c;获取信息并将其转换为 Langchain 可以理解的格式。 LangChain 中有几十个文档加载器&#xff0c;可以在这查看https://python.langchain.com/v0.2/docs/integrations/document_lo…

Hive日志介绍

日志描述 日志路径&#xff1a;Hive相关日志的默认存储路径为“/var/log/Bigdata/hive/角色名”&#xff0c;Hive1相关日志的默认存储路径为“/var/log/Bigdata/hive1/角色名”&#xff0c;以此类推。 HiveServer&#xff1a;“/var/log/Bigdata/hive/hiveserver”&#xff0…

【算法】常用排序算法(插入排序、希尔排序、堆排序、选择排序、冒泡排序、快速排序、归并排序、计数排序)超详细

排序算法是数据结构相关知识中非常重要的一节&#xff0c;相信很多小伙伴对这部分知识一知半解。那么接下来&#xff0c;小编就要带领大家一起来进行对排序算法的深入剖析学习&#xff0c;希望本篇文章能够使你有所收获&#xff01; 一.常见的排序算法 排序算法有很多种&#…