当前位置: 首页 > article >正文

Nginx系列04(虚拟主机配置、反向代理)

目录

Nginx 虚拟主机配置

Nginx 反向代理


Nginx 虚拟主机配置

  • 概念:虚拟主机是指在一台物理服务器上运行多个独立的网站,每个网站都有自己独立的域名、配置和资源,就像它们运行在独立的服务器上一样。Nginx 通过配置不同的server块来实现虚拟主机功能。
  • 原理:Nginx 根据客户端请求的Host头信息来匹配相应的server块,从而将请求路由到对应的虚拟主机。例如,当用户访问example.com时,Nginx 会查找server_nameexample.comserver块,并按照该块中的配置来处理请求。
  • 场景示例:假设你有两个网站example.comtest.com,它们都部署在同一台服务器上。你可以通过以下配置来实现虚拟主机:
http {
    # 其他配置...
    server {
        listen 80; # 监听80端口,即HTTP协议的默认端口,所有发往该服务器80端口的HTTP请求都会被这个server块处理
        server_name example.com; # 定义这个虚拟主机的域名,当请求的Host头为example.com时,会匹配到这个server块
        root /var/www/html/example; # 指定这个虚拟主机的网站根目录,所有请求的文件路径都会基于这个目录查找
        index index.html; # 设置默认的索引文件,当访问目录时,会优先查找index.html文件
        location / {
            try_files $uri $uri/ =404; # 尝试按顺序查找文件,如果文件不存在则返回404错误。$uri表示当前请求的URI,$uri/表示在当前URI后加上斜杠,尝试查找目录
        }
    }
    server {
        listen 80; # 同样监听80端口,因为不同的虚拟主机可以通过不同的域名区分,所以可以共用同一端口
        server_name test.com; # 定义这个虚拟主机的域名,当请求的Host头为test.com时,会匹配到这个server块
        root /var/www/html/test; # 指定这个虚拟主机的网站根目录
        index index.html; # 设置默认的索引文件
        location / {
            try_files $uri $uri/ =404; # 与上面的解释相同,处理文件查找和错误返回
        }
    }
}

在这个例子中,example.com的网站文件存放在/var/www/html/example目录,test.com的网站文件存放在/var/www/html/test目录。当用户分别访问这两个域名时,Nginx 会根据server_name的配置将请求准确地分发到对应的网站目录。

Nginx 反向代理

  • 概念:反向代理是指代理服务器位于客户端和目标服务器之间,客户端向代理服务器发送请求,代理服务器将请求转发到目标服务器,并将目标服务器的响应返回给客户端,客户端并不知道请求实际是由后端的目标服务器处理的。
  • 原理:Nginx 通过proxy_pass指令来实现反向代理功能。当客户端请求匹配到配置了proxy_passlocation块时,Nginx 会将请求转发到proxy_pass指定的目标服务器地址。
  • 场景示例:假设你有一个基于 Node.js 开发的 Web 应用,运行在127.0.0.1:3000,你希望通过 Nginx 作为反向代理,使用户可以通过http://example.com来访问这个应用。配置如下:
http {
    # 其他配置...
    server {
        listen 80; # 监听80端口,接收HTTP请求
        server_name example.com; # 定义这个虚拟主机的域名,用于匹配请求的Host头
        location / {
            proxy_pass http://127.0.0.1:3000; # 将所有请求转发到本地的127.0.0.1:3000地址,即Node.js应用所在的地址
            proxy_set_header Host $host; # 将客户端请求中的Host头信息传递给后端服务器,使后端服务器能获取正确的域名信息
            proxy_set_header X-Real-IP $remote_addr; # 将客户端的真实IP地址传递给后端服务器,避免后端服务器获取到代理服务器的IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 记录客户端的真实IP地址,当存在多个代理时,这个头信息会包含多个IP地址
            proxy_set_header X-Forwarded-Proto $scheme; # 将客户端请求的协议(http或https)传递给后端服务器
        }
    }
}

在上述配置中,所有对http://example.com的请求都会被 Nginx 转发到http://127.0.0.1:3000,同时设置了一些请求头信息,以确保后端应用能够正确获取客户端的真实 IP 等信息。这样,用户在访问http://example.com时,实际访问的是运行在本地 3000 端口的 Node.js 应用,而用户看到的始终是example.com这个域名。


http://www.kler.cn/a/566793.html

相关文章:

  • Redis 的 Bitmap(位图)的使用场景
  • Windows 图形显示驱动开发-WDDM 3.2-自动显示切换(五)
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(2)
  • 交叉编译curl(OpenSSL)移植ARM详细步骤
  • 支付宝 IoT 设备入门宝典(下)设备经营篇
  • python 视频网站爬虫教程,爬虫入门教程(付安装包)
  • 基于大型语言模型的google浏览器翻译插件
  • Redis开启远程访问
  • IDEA-插件开发踩坑记录-第七坑-Unable to locate JNA native support library
  • 第15届 蓝桥杯 C++编程青少组中/高级选拔赛 202403 真题答案及解析
  • threeJs+vue 加载gltf模型、获取模型尺寸、播放模型动画
  • React vs Vue3深度对比与使用场景分析
  • 使用机器学习进行土地覆盖分类
  • 网络安全和爬虫的关系
  • elementUI 表格隔行换色,修改table表头背景样式
  • 排序算法归类整理对比
  • 002-快速安装 Linux 虚拟机
  • PyCharm中通过命令行执行`pip`命令下载到哪里了:虚拟环境目录下
  • 如何通过网管提升运维效率?
  • 游戏引擎学习第125天