当前位置:首页 > 技术 > 正文内容

Nginx Web服务器基础配置与负载均衡实现

访客 技术 2026年6月12日 1

服务器概述

服务器是专为提供计算服务而设计的设备,相较于普通PC,具备更高的稳定性、并发处理能力和可扩展性。

所有互联网应用都依赖于服务器作为基础支撑。当我们访问网站时,实际上是通过域名系统(DNS)将域名解析为IP地址,然后浏览器连接到对应服务器获取资源。

可以这样理解:服务器如同房屋,域名如同户主姓名(唯一标识),IP地址如同身份证号码(具体位置)。

Web服务器与应用服务器

Web服务器是运行在物理服务器上的软件程序,负责接收和分发网络请求。其处理能力直接影响网站的并发性能。常见的Web服务器包括Apache和Nginx。

Web应用服务器专注于执行业务逻辑代码,同时具备处理网络请求的功能。为了提升并发性能,通常会在应用服务器前部署Web服务器。典型的例子包括Tomcat、uWSGI和Gunicorn等Python应用服务器。

Nginx简介

Nginx是一款高性能的HTTP和反向代理服务器,同时支持IMAP/POP3/SMTP协议。主要特性包括:

  • 轻量级设计,高并发处理能力
  • 高效的静态资源处理
  • 内置负载均衡功能

负载均衡实现

大型网站通常由多台服务器集群提供服务,单一服务器难以承载巨大流量。负载均衡技术将请求分散到不同服务器,提升整体处理能力。

负载均衡分为硬件负载均衡(如F5设备)和软件负载均衡(如Nginx、Apache)。以下是Nginx负载均衡配置示例:

http {
    server {
        listen 80;
        server_name example.com;
        location / {
            proxy_pass http://backend_cluster;
        }
    }
    
    upstream backend_cluster {
        server 192.168.1.10:8080;
        server 192.168.1.11:8080;
        server 192.168.1.12:8080;
    }
}

除了轮询方式,还支持以下负载策略:

权重分配

upstream backend_cluster {
    server 192.168.1.10:8080 weight=1;
    server 192.168.1.11:8080 weight=2;
    server 192.168.1.12:8080 weight=3;
}

IP哈希

upstream backend_cluster {
    ip_hash;
    server 192.168.1.10:8080 weight=1;
    server 192.168.1.11:8080 weight=2;
    server 192.168.1.12:8080 weight=3;
}

跨域问题解决方案

浏览器的同源策略限制了跨域资源共享。当协议、域名或端口任一不同时,就会产生跨域问题。Nginx通过反向代理可以有效解决这一问题。

server {
    listen 80;
    server_name mydomain.com;
    
    location /api/ {
        proxy_pass http://backend-server:3000/;
    }
    
    location /admin/ {
        proxy_pass http://admin-server:4000/;
    }
    
    location /external/ {
        proxy_pass http://external-service.com/;
    }
}

上述配置实现了:

  • mydomain.com/api/* 请求转发至本地3000端口服务
  • mydomain.com/admin/* 请求转发至本地4000端口服务
  • mydomain.com/external/* 请求转发至外部服务

Location匹配规则

当URL匹配多个location时,Nginx会选择最长匹配项:

# 匹配 /service/ 路径
location /service/ {
    proxy_pass http://backend/;
}

# 精确匹配 /service 目录
location /service {
    proxy_pass http://backend;
}

完整Nginx配置示例

worker_processes 1;

events {
    worker_connections 1024;
}

http {
    include mime.types;
    default_type application/octet-stream;
    
    sendfile on;
    keepalive_timeout 65;
    
    server {
        listen 80;
        
        location / {
            proxy_pass http://localhost:8080;
        }
        
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
    }
}

高级配置示例

user nginx;
worker_processes auto;

events {
    worker_connections 1024;
}

http {
    log_format custom '[($remote_addr) - ($remote_user [$time_local]) $request" '
                      '($status) ($http_user_agent)($http_x_forwarded_for)'
                      '($upstream_addr) ($upstream_response_time) ($request_time)]';
    
    proxy_cache_path /cache/nginx levels=1:2 keys_zone=cache_zone:100m 
                     inactive=7d max_size=10g;
    
    gzip on;
    gzip_types text/plain application/javascript text/css;
    
    upstream app_servers {
        server localhost:8000;
    }
    
    server {
        listen 80;
        server_name example.com;
        
        location /static/ {
            alias /var/www/static/;
        }
        
        location / {
            proxy_cache cache_zone;
            proxy_cache_key $uri;
            
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
            
            proxy_pass http://app_servers;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    
    # HTTPS配置
    server {
        listen 443 ssl;
        server_name example.com;
        
        ssl_certificate /path/to/cert.pem;
        ssl_certificate_key /path/to/key.pem;
        
        location / {
            proxy_pass http://app_servers;
        }
    }
}
标签: Nginx

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。