首页 > 系统相关 >nginx配置web服务|反向代理|负载均衡

nginx配置web服务|反向代理|负载均衡

时间:2024-08-12 17:39:22浏览次数:12  
标签:web 负载 ico Nginx server nginx proxy root location

目录
Nginx 配置文件通常位于 /etc/nginx/nginx.conf 或者 /usr/local/nginx/conf/nginx.conf,具体位置取决于你的系统和安装方式。配置文件是 Nginx 的核心,用于定义服务器如何运行以及如何处理请求。

http模块

user nginx;
worker_processes auto;

error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;
    keepalive_timeout  65;
    types_hash_max_size 2048;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/mime.types;
}

解释各个部分

  • user:定义运行 Nginx 进程的用户和组。

  • worker_processes:指定 Nginx 应该启动的工作进程数量。

  • error_log:定义错误日志的位置。

  • pid:定义 Nginx 进程 ID 文件的位置。

  • events:配置事件处理模型,如 worker_connections 设置每个工作进程可以同时打开的最大连接数。

  • http:这是 Nginx 配置的主要部分,包括全局设置、虚拟主机配置等。

  • include:用于包含其他配置文件。

  • log_formataccess_log:用于定义访问日志的格式和位置。

  • sendfile, tcp_nopush, tcp_nodelay, keepalive_timeout:这些是提高性能和优化网络传输的选项。

  • types_hash_max_size:用于缓存 MIME 类型的大小限制。

  • include:最后两个 include 语句用于包含额外的配置文件,比如站点配置或模块配置。

server模块(虚拟主机配置)

http 块中,你可以定义多个 server 块来配置不同的虚拟主机。每个 server 块可以有以下参数:

server {
    listen 80;
    server_name example.com;

    root /var/www/example;
    index index.html index.htm;

    # 直接指定“/”可代替上面的“root”,能更灵活的配置其他选项
    location / {
        try_files $uri $uri/ =404;
    }

    # 更多 location 块用于更详细的 URL 路径匹配和处理
}
  • listen:定义服务器监听的端口和地址。
  • server_name:定义域名或 IP 地址。可配置二级域名。
  • root:定义网站根目录。
  • index:定义默认索引文件,如果根目录下的默认文件不叫index.html而叫app.html,那么需配置index为app.html。
  • location:定义 URL 的路径匹配规则和处理方式。

location模块

server模块中的 location 块是用来定义如何处理与特定 URL 模式匹配的 HTTP 请求的。location 块允许你针对不同的 URL 路径指定不同的处理逻辑,比如静态文件服务、动态内容处理、重定向、反向代理、负载均衡等。下面详细解释 location 的不同用法和语法:

基本语法

location 块的基本语法如下:

location [=|~|~*|^~] /pattern {
    # 处理逻辑
}

其中 /pattern 是 URL 路径的模式,可以是精确的字符串、正则表达式或其他匹配类型。

匹配类型

假设我在/data/icons/目录下有三个文件favicon1.ico、favicon2.ico、favicon3.ico

等号匹配(=

当使用等号作为前缀时,location 将只匹配完全相等的 URL 路径。这是最高效的匹配类型,因为 Nginx 可以直接查找而无需进行正则表达式匹配。

location = /favicon1.ico {
    root /data/icons;
}

正则匹配(~

使用波浪线作为前缀时,location 将使用正则表达式来匹配 URL 路径。

location ~ /favicon[2-3].ico {
    root /data/icons;
}

忽略大小写的正则匹配(~*

类似正则匹配,但忽略大小写。我们将favicon3.ico改成Favicon3.ico。

location ~* /favicon[2-3].ico {
    root /data/icons;
}

此时按照我们所理解的,访问example.com/favicon3.ico应该能正常显示,其实不然!需要访问example.com/Favicon3.ico才能正常显示。

为什么呢?

因为,只是url和nginx这行配置忽略大小写,让url走这行配置的规则,并不是url和实际访问资源忽略大小写。实际访问的时候还是要和资源名称大小写一致。

常见指令

location 块内,你可以定义一系列指令来处理匹配到的请求。常见的指令包括:

  • root:设置该 location 下的文档根目录。
  • alias:与 root 类似,但是 alias 直接映射 URL 到文件系统路径。
  • try_files:尝试按给定顺序查找文件。如果找不到,可以指定一个默认处理程序,如转发到后端应用。
  • proxy_pass:用于设置反向代理,访问服务而非静态资源用这个。
  • rewrite:用于重写 URL 或重定向请求。
  • return:立即返回一个 HTTP 响应码和可选的内容。

嵌套 location

location 块可以嵌套在另一个 location 块内,允许更精细的控制。例如:

location / {
    root /www/;
    location ~ \.php$ {
        root /var/www/;
        fastcgi_pass   127.0.0.1:9000;
    }
}

在这个例子中,所有请求都默认指向 /www/ 根目录,但 .php 扩展名的请求会被特殊处理,指向 /var/www/ 并通过 FastCGI 发送给 PHP 处理器。

反向代理

假设你有一个后端应用服务器运行在本地的 8000 端口,并且你想通过 Nginx 将所有对 example.com 的请求代理到这个后端服务器,你可以使用以下配置:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 可选的其他配置
        proxy_redirect off;
        proxy_buffering off;
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
        send_timeout 60s;
    }
}

解释配置

  • listen 80;:监听 80 端口上的请求。
  • server_name example.com;:指定服务器名称,确保只有对 example.com 的请求被处理。
  • location / { ... }:定义所有请求都应该被代理。
  • proxy_pass http://127.0.0.1:8000;:将请求转发到本地的 8000 端口。
  • proxy_set_header:设置代理传递的头部信息。这很重要,因为后端服务器可能需要知道原始客户端的信息。
  • 其他 proxy_ 配置:这些设置用于优化代理连接的性能和可靠性。

负载均衡

在 Nginx 中配置负载均衡可以让你在多台后端服务器之间分配客户端的请求,以提高应用程序的可用性和响应速度,同时也可以增加系统的冗余度。以下是使用 Nginx 配置基于轮询(round-robin)策略的简单负载均衡的步骤和示例配置:

步骤 1: 定义 Upstream 块

首先,你需要定义一个 upstream 块,它将包含一组后端服务器的列表。这个 upstream 块可以被多个 location 块引用,用于负载均衡。

步骤 2: 配置 Server 和 Location 块

接着,在 server 块中使用 location 块来指定哪些请求应该被代理到定义好的 upstream。这样,Nginx 将根据负载均衡策略将请求分发到不同的后端服务器。

示例配置

假设你有两台后端应用服务器,分别运行在 backend1.example.com:8000backend2.example.com:8000,你可以使用以下配置来实现负载均衡:

upstream backend {
    server backend1.example.com:8000;
    server backend2.example.com:8000;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

解释配置

  • upstream backend { ... }:定义了一个名为 backend 的上游服务器组,包含了两台后端服务器。
  • server backend1.example.com:8000;server backend2.example.com:8000;:指定了后端服务器的地址和端口。
  • proxy_pass http://backend;:告诉 Nginx 将请求代理到 backend 上游服务器组。

负载均衡策略

Nginx 默认使用轮询(round-robin)策略,但你也可以使用其他策略,如最少连接(least connections)或哈希(hash)策略。例如,为了使用最少连接策略,你可以修改 upstream 块如下:

upstream backend {
    least_conn;
    server backend1.example.com:8000;
    server backend2.example.com:8000;
}

在这个配置中,least_conn; 指令告诉 Nginx 选择连接数最少的服务器来处理新的请求。还有其他策略配置可自行百度,这里不做赘述。

以上是我在实际使用nginx时常用的配置,剩余的配置在实际使用后再做持续补充~

Q&A

1.location里root和alias的区别是什么?

在 Nginx 的 location 块中使用 rootalias 指令时,它们之间的主要区别在于如何解析 URL 到实际的文件系统路径。尽管这两个指令都用于指定文件的根目录,但它们的工作方式有所不同。

**root** 指令

root 指令用于设定一个基准目录,当与 location 结合使用时,Nginx 会将请求的 URI(统一资源标识符)附加到 root 目录的后面,然后查找对应的文件或目录。这意味着,如果 root 设定为 /data/icons,并且 URL 请求为 /img/favicon1.ico,那么 Nginx 会尝试在 /data/icons/img/fabicon1.ico 查找文件。

示例:

location / {
    root /data/icons;
    # 请求 /img/favicon1.ico 会查找 /data/icons/img/favicon1.ico
}

**alias** 指令

alias 指令则是用来做 URL 到文件系统路径的直接映射。当使用 alias 时,URL 的路径部分将被完全替换为 **alias** 指定的路径,而不是附加到其后。这意味着,如果 alias 设定为 /data/icons/img/,并且 URL 请求为 /img/favicon1.ico,那么 Nginx 将在 /data/icons/img/favicon1.ico 直接查找文件,而不会把 /img/ 加在 alias 指定的路径后面。

示例:

location /img/ {
    alias /data/icons/img/;
    # 请求 /img/favicon1.ico 会查找 /data/icons/img/favicon1.ico
}

选择使用 root 还是 alias 主要取决于你的具体需求。

一般情况下,nginx配置的良好习惯是:

  • 在location /中配置root目录
  • 在location /path中配置alias目录

标签:web,负载,ico,Nginx,server,nginx,proxy,root,location
From: https://www.cnblogs.com/GilbertDu/p/18355434

相关文章

  • windows下nginx配置开机自启动
    (1)、WindowsServiceWrapper工具下载工具下载URL:https://github.com/winsw/winsw/releases   (2)、WindowsServiceWrapper工具安装配置第一步:下载后将该工具放入Nginx的安装目录下,并且将其重命名为nginx-service.exe第二步:在nginx安装目录下新建服务日志文件夹:server......
  • 基于django+vue基于web的园区车辆出入管理系统【开题报告+程序+论文】计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着城市化进程的加快,各类产业园区、住宅小区及商业综合体等园区规模不断扩大,车辆管理成为园区管理中的重要环节。传统的车辆出入管理方式......
  • nginx 反向代理常用设置说明
    nginx反向代理常用设置说明根据不同的后缀名访问不同的服务器地址例如:server{listen80;server_nameaaa.com.cn;#服务器地址或绑定域名#^~/api表示匹配前缀为api的请求location^~/api/{#proxy_pass的结尾有/,->效果:会在请......
  • nginx 反向代理
    nginx.confhttp{server{listen80;server_namelocalhost;location^~/api{roothtml;indexindex.html;proxy_passhttp://localhost:5000/api;#前面加httpproxy_r......
  • Nginx负载均衡的max_fails和fail_timeout的默认配置问题
    今天发现一个奇怪的现象,前端请求后端服务多次后会超时一次,经过多次验证确定是大概10s左右就会超时一次,检查后端服务,发现其中一个节点已经夯死。但是我们的nginx负载均衡策略是轮询机制,按照配置来看应该是每隔一次请求轮询到失败的节点时超时一次才对。为什么是每隔10s超时一次呢?......
  • WEB渗透-近源攻击合集
    钓鱼网络Hostapd>aptinstallhostapddnsmasq>cd/etc/hostapd创建无加密热点>vimopen.conf修改以下内容Interface=wlan1Ssid=FreeWIFIDriver=nl80211Channel=1Hw_mode=g修改dns配置>vim/etc/dnsmasq.confDhcp-range=10.0.0.1,10.0.0.255,12hInterface......
  • 基于flask+vue框架的基于Web民宿管理系统的设计与实现[开题+论文+程序]-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展,民宿作为一种新兴的住宿方式,凭借其独特的文化体验、个性化的服务以及灵活的价格策略,逐渐受到广大旅行者的青睐。然而......
  • vue实现录音并转文字功能,包括PC端web,手机端web
    vue实现录音并转文字功能,包括PC端,手机端和企业微信自建应用端不止vue,不限技术栈,vue2、vue3、react、.net以及原生js均可实现。原理浏览器实现录音并转文字最快捷的方法是通过WebSpeechAPI来实现,这是浏览器内置示例的api方法,可以直接调用,无需引入任何依赖包,唯一需要注意的是浏览......
  • web解题思路(自用)
    工具firefox的hackbar插件,bp,kali-linux,蚁剑,7kbscan等抓包修改BP,hackbar通过hackbar传入get,post参数,例如?name1=value1&name2=value2,url后添加文件路径,可以访问相应的文件,404notfound;403越权访问;200okhttpX-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式......
  • 打造高效存储与访问体验:NFS共享携手Nginx负载均衡,赋能企业级数据流通与性能优化
     作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭:   云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团团-CSDN博客前言:随着业务的增长,公司需要更多的服务器来支持用户访问和应用程序的运行。NFS共享可以解决文件存储的问题,而n......