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这个域名。

相关推荐
苹果醋38 小时前
数据库索引设计:在 MongoDB 中创建高效索引的策略
java·运维·spring boot·mysql·nginx
✎﹏赤子·墨筱晗♪9 小时前
从反向代理到负载均衡:Nginx + Tomcat 构建高可用Web服务架构
nginx·tomcat·负载均衡
叶绪2589 小时前
Nginx 反向代理 + Tomcat 集群:负载均衡配置步骤与核心原理
nginx·tomcat·负载均衡
杏花春雨江南13 小时前
腾讯云 CLB (Cloud Load Balancer) 为例,详细讲解如何配置 Nginx 集群
nginx·云计算·腾讯云
上海达策TECHSONIC14 小时前
经验分享:如何让SAP B1数据库性能提升50%
运维·数据库·运维开发
牛奶咖啡1314 小时前
Nginx+Tomcat集群Redis共享session方案
redis·nginx·tomcat·redisson·分布式session共享方案·分布式session实现·jdk1.8环境安装
荣光波比16 小时前
Nginx 实战系列(四)—— Nginx反向代理与负载均衡实战指南
运维·nginx·云计算·负载均衡
岚天start16 小时前
K8s Ingress Annotations参数使用指南
nginx·kubernetes·k8s·ingress·ingress控制器
Mr. Cao code17 小时前
探索OpenResty:高性能Web开发利器
linux·运维·服务器·前端·nginx·ubuntu·openresty
方渐鸿1 天前
【2024】k8s集群 图文详细 部署安装使用(两万字)
java·运维·容器·kubernetes·k8s·运维开发·持续部署