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

目录

[Nginx 虚拟主机配置](#Nginx 虚拟主机配置)

[Nginx 反向代理](#Nginx 反向代理)


Nginx 虚拟主机配置

  • 概念 :虚拟主机是指在一台物理服务器上运行多个独立的网站,每个网站都有自己独立的域名、配置和资源,就像它们运行在独立的服务器上一样。Nginx 通过配置不同的server块来实现虚拟主机功能。
  • 原理 :Nginx 根据客户端请求的Host头信息来匹配相应的server块,从而将请求路由到对应的虚拟主机。例如,当用户访问example.com时,Nginx 会查找server_nameexample.comserver块,并按照该块中的配置来处理请求。
  • 场景示例 :假设你有两个网站example.comtest.com,它们都部署在同一台服务器上。你可以通过以下配置来实现虚拟主机:
bash 复制代码
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来访问这个应用。配置如下:
bash 复制代码
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这个域名。

相关推荐
Jackilina_Stone5 小时前
一个高性能的HTTP和反向代理服务器:Nginx
nginx·http·ai 推理·nv
IT成长日记9 小时前
【Nginx开荒攻略】静态文件服务深度解析:MIME类型映射与优化实战
linux·运维·服务器·nginx·mime
zz-zjx12 小时前
Web接入层的“铁三角”---防盗链、反向代理,负载均衡(nginx)
前端·nginx·负载均衡
珊瑚礁的猪猪侠13 小时前
Nginx从入门到精通:小白实战教程
运维·nginx
邂逅星河浪漫14 小时前
【DockerFile+Nginx+DockerCompose】前后端分离式项目部署(docker容器化方式)
nginx·docker·centos·部署·docker-compose·dockerfile·容器化部署
天空之外13615 小时前
nginx xxs漏铜修复、nginx 域名配置、nginx https证书配置、Http不安全处理方法
运维·nginx
神秘人X70715 小时前
Nginx 访问控制、用户认证与 HTTPS 配置指南
nginx·https
失因17 小时前
Nginx 反向代理、负载均衡与 Keepalived 高可用
运维·nginx·负载均衡
码界奇点18 小时前
Nginx 502 Bad Gateway从 upstream 日志到 FastCGI 超时深度复盘
运维·nginx·阿里云·性能优化·gateway
程序员小白条1 天前
度小满运维开发一面
java·运维·python·职场和发展·运维开发