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

相关推荐
再学一丢丢3 小时前
Keepalived+LVS+nginx高可用架构
nginx·架构·lvs
xujiangyan_4 小时前
nginx的自动跳转https
服务器·nginx·https
tingting011921 小时前
k8s 1.30 安装ingress-nginx
nginx·容器·kubernetes
残花月伴1 天前
linux详细安装/配置(mysql/nginx/tomcat)
linux·mysql·nginx
Cloud_.1 天前
用Nginx实现负载均衡与高可用架构(整合Keepalived)
nginx·架构·负载均衡·keepalived
Shi_haoliu1 天前
各种网址整理-vue,前端,linux,ai前端开发,各种开发能用到的网址和一些有用的博客
linux·前端·javascript·vue.js·nginx·前端框架·pdf
LYX36931 天前
nginx https配置
运维·nginx
java搬砖工-苤-初心不变1 天前
关于 Nginx 配置中 proxy_set_header Host $host 的作用及其对 HTTP 请求头影响的详细说明,结合示例展示设置前后的差异
网络·nginx·http
裁二尺秋风1 天前
Nginx — Nginx处理Web请求机制解析
前端·nginx
Kendra9192 天前
Keepalive+LVS+Nginx+NFS高可用架构
nginx·架构·lvs