Nginx实战安装与配置指南

我在无数个项目中用到了Nginx。今天,我将从实战角度出发,分享Nginx的安装、基础配置以及一些高级功能的使用经验。希望通过这篇文章,你能掌握Nginx的基本使用,并能解决一些常见问题。

一、Nginx安装

首先,我们从Nginx的安装开始。假设你已经下载好了Nginx的源码包,比如nginx-1.18.0.tar.gz

  1. 解压源码包

    tar -zxvf nginx-1.18.0.tar.gz
    cd nginx-1.18.0
    
  2. 配置安装目录

    在安装之前,可以通过--prefix参数指定Nginx的安装目录。如果不指定,默认会安装在/usr/local/nginx

    ./configure --prefix=/usr/local/nginx
    make
    make install
    
  3. 检查安装结果

    安装完成后,进入/usr/local/nginx目录,你会发现有sbin目录,其中包含了nginx可执行文件。

    cd /usr/local/nginx
    ls sbin
    # 输出: nginx
    

    执行./sbin/nginx启动Nginx,然后在浏览器中访问http://localhost,如果看到Nginx的欢迎页面,说明安装成功。

二、基础指令

Nginx的配置文件是nginx.conf,通常位于安装目录下的conf目录中。以下是一些基础指令的介绍。

  1. listen

    用于配置Nginx监听的端口号。

    server {
        listen 80;
    }
    
  2. server_name

    用于配置虚拟主机的域名。

    server {
        listen 80;
        server_name www.example.com;
    }
    
  3. location

    location指令用于匹配用户请求的URI,并执行相应的操作。

    • =:精确匹配
    • ^~:前缀匹配
    • ~:区分大小写的正则匹配
    • ~*:不区分大小写的正则匹配
    • /:通用匹配,匹配所有请求

    示例:

    server {
        listen 80;
        server_name www.example.com;
    
        location = / {
            # 只匹配根目录的请求
            index index.html;
        }
    
        location /images/ {
            # 匹配以/images/开头的请求
            root /data;
        }
    
        location ~ \.(gif|jpg|png)$ {
            # 匹配以.gif、.jpg或.png结尾的请求
            root /data/images;
        }
    }
    
三、反向代理与域名重定向

Nginx的反向代理功能非常强大,可以用来代理后端的服务。

  1. 反向代理示例

    假设我们有一个后端服务运行在127.0.0.1:8080,我们可以通过Nginx来代理这个服务。

    server {
        listen 80;
        server_name www.123.com;
    
        location / {
            proxy_pass http://127.0.0.1:8080;
        }
    }
    

    当你访问http://www.123.com时,请求会被转发到http://127.0.0.1:8080

  2. 域名重定向

    如果你想把一个域名重定向到另一个域名或路径,可以使用return指令。

    server {
        listen 80;
        server_name old.example.com;
    
        location / {
            return 301 http://new.example.com;
        }
    }
    
四、限流配置

限流是Nginx的一个重要功能,可以用来保护后端服务不被过载。

  1. 漏桶算法与令牌桶算法

    • 漏桶算法:强行限制数据的传输速率。
    • 令牌桶算法:限制数据的平均传输速率,并允许某种程度的突发传输。
  2. 限流配置示例

    使用limit_req_zonelimit_req指令来实现限流。

    http {
        limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    
        server {
            listen 80;
            server_name www.example.com;
    
            location / {
                limit_req zone=one burst=5 nodelay;
                proxy_pass http://127.0.0.1:8080;
            }
        }
    }
    
    • zone=one:10m:定义一个大小为10M,名字为one的内存区域。
    • rate=1r/s:限制每秒1次请求。
    • burst=5:设置一个大小为5的缓冲区,当请求超过限制时,可以先放到缓冲区中。
    • nodelay:如果设置,超过访问频次且缓冲区也满了时,直接返回503。
五、负载均衡

Nginx的负载均衡功能可以用来分发请求到多个后端服务器。

  1. 负载均衡方式

    • 轮询:默认方式,每个请求按顺序分配到后端服务器。
    • 权重:指定每个服务的权重比例。
    • ip_hash:根据访问IP的hash结果分配,每个访客固定访问一个后端服务。
    • least_conn:将请求分配到连接数最少的服务上。
    • fair:按后端服务器的响应时间来分配请求(需要第三方模块)。
  2. 负载均衡示例

    http {
        upstream backend {
            server 192.168.1.100;
            server 192.168.1.101;
            server 192.168.1.102 weight=2;
        }
    
        server {
            listen 80;
            server_name www.example.com;
    
            location / {
                proxy_pass http://backend;
            }
        }
    }
    
    • upstream backend:定义了一个名为backend的服务器组。
    • server 192.168.1.102 weight=2:指定192.168.1.102的权重为2,其他服务器默认权重为1。
六、动态负载均衡与高可用集群
  1. 动态负载均衡

    使用Consul+upsync+Nginx可以实现无需reload的动态负载均衡。传统的负载均衡需要每次重新加载nginx.conf,而动态负载均衡可以实现Upstream的可配置化、动态化。

  2. 高可用集群

    使用LVS+Keepalived+Nginx+Tomcat可以搭建高可用双机主从热备集群。

    • Nginx:两台Nginx主备关系,只有一台在工作。
    • Tomcat:集群,同时工作。
    • Keepalived:安装在两台Nginx上,配置不同。
    • LVS:Linux虚拟服务器,实现四层负载均衡。

    Keepalived的健康检查和失败切换功能可以确保当主Nginx出现问题时,备Nginx可以接管业务,提高服务的稳定性。

七、静态资源配置
  1. sendfile

    用于配置文件读取方式,可以提高文件传输效率。

    http {
        sendfile on;
    }
    
  2. tcp_nopush

    sendfile开启的情况下,提高网络包的传输效率。

    http {
        tcp_nopush on;
    }
    
  3. tcp_nodelay

    在keepalive连接下,提高网络包的传输实时性。

    http {
        tcp_nodelay on;
    }
    
  4. gzip

    用于压缩传输内容,减少带宽占用。

    http {
        gzip on;
        gzip_comp_level 2;
        gzip_http_version 1.1;
    }
    
    • gzip_comp_level 2:设置压缩级别为2。
    • gzip_http_version 1.1:只对HTTP/1.1协议的请求进行gzip压缩。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值