Nginx快速入门:编译及常用配置

Nginx 是一个高性能的 HTTP 服务器和反向代理服务器,也是一个 IMAP/POP3 邮件代理服务器。它以其高并发处理能力和低资源消耗而闻名,能够同时处理数千个连接。

Nginx 的主要功能包括:

  1. 静态资源服务器:Nginx 可以担任静态资源服务器的角色,高效地提供静态内容,如 HTML、图片、视频等,因其采用事件驱动架构,能够比传统服务器处理更多的并发请求。

  2. 反向代理和负载均衡:Nginx 可以作为反向代理服务器,将客户端请求分发到后端多个服务器上,从而实现负载均衡。它支持多种负载均衡算法,如轮询、IP 哈希等。

  3. SSL/TLS 支持:Nginx 支持 SSL/TLS 协议,可以用来配置 HTTPS 站点,保证数据传输的安全性。

  4. 动静分离:Nginx 可以根据请求的类型(如静态资源请求或动态应用请求)将它们分发到不同的服务器,这种方式提高了站点的性能。

  5. 模块化架构:Nginx 的功能可以通过各种模块进行扩展,例如 Gzip 压缩、访问控制、日志记录等。

  6. 高可用性和容错性:通过与其他工具(如 Keepalived)结合,Nginx 可以实现高可用性,确保服务的连续性。

Nginx 的设计目标之一是提高服务器的性能和稳定性,同时减少服务器资源的消耗,这使得它成为处理高并发请求的理想选择。Nginx 现已广泛应用于大中型网站和云服务中,成为全球最受欢迎的 Web 服务器之一。

nginx可以直接通过yum install安装,不过这样只能安装基础的nginx,如果引入更多模块的功能,所以手动编译部署,可以使用nginx更多功能,并且自定义其应该具有什么模块和功能。

Nginx编译

nginx是一个高度模块化的中间件,其各个功能分为不同的模块,甚至不同的文件。我们下载的nginx模块,通常只包括核心模块,和一部分可选模块。我们还可以通过下载其他开发者或社区开发的模块,在编译时进行引入,这些由非官方个人或团队开发和维护的模块,叫第三方模块。

核心模块

其中核心模块是编译时必须且自动选择的,其中包含如下模块:

  • ngx_core_module:提供了全局配置选项,如 user、worker_processes、error_log、pid 等。
  • ngx_errlog_module:管理错误日志的记录。
  • ngx_events_module:处理 Nginx 的事件驱动机制,控制服务器的并发处理能力。
  • ngx_http_core_module:用于处理 HTTP 请求的核心模块。
  • ngx_http_log_module:访问日志记录模块。

可选模块

还有一部分模块,虽然是自带于nginx中,不过需要在编译时,通过--with-选项,选择性的进行添加,模块如下:

HTTP 模块:  

  • http_ssl_module:启用 SSL/TLS 支持,用于处理 HTTPS 请求。
  • http_v2_module:启用 HTTP/2 支持,优化网页加载速度。
  • http_gzip_static_module:启用 Gzip 静态文件支持,减少带宽消耗。
  • http_stub_status_module:提供服务器运行状态的监控接口。
  • http_realip_module:处理代理服务器后的真实客户端 IP 地址。
  • http_auth_request_module:通过子请求实现用户身份验证。
  • http_sub_module:在响应内容中替换文本。
  • http_geoip_module:基于 IP 地址提供地理位置信息。

流模块(用于 TCP/UDP 处理):  

  • stream:启用 TCP/UDP 流量处理。  
  • stream_ssl_module:为 TCP/UDP 流量处理启用 SSL 支持。  
  • stream_realip_module:获取真实客户端 IP 地址。

邮件模块(用于邮件代理):  

  • mail:启用邮件代理功能(SMTP/IMAP/POP3)。
  • mail_ssl_module:为邮件代理启用 SSL 支持。

第三方模块

第三方模块由个人或其他社区开发和维护,用来扩展nginx的功能,通过--add-module=path/to/module的形式进行引入。

编译过程

编译过程需要先下载编译所需工具,以及nginx源代码。然后通过configure可执行文件,来启动对应模块,然后在通过make install命令,进行编译。我们这里以引入可选模块http_ssl_module 和with-http_gzip_static_module为例,具体命令如下:

#首先下载编译所需工具
yum groupinstall 'Development Tools'
yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel

#下载nginx源码并解压
cd /
wget https://nginx.org/download/nginx-1.26.1.tar.gz
tar -xf /nginx-1.26.1.tar.gz

#编译nginx
./configure --prefix=/nginx --with-http_ssl_module --with-http_gzip_static_module
make
make install

下载完成后可以如下命令,来验证nginx是否安装成功,以及安装模块内容:

/nginx/sbin/nginx -V #注意v是大写,小写不会打印模块信息

得到如下结果,证明nginx安装成功,并且可以查看到我们刚刚的模块信息。

 除了这些可选模块外,我们还可以通过实际需求,引入第三方模块,这里就不举例了。

常用配置项

完成nginx编译后,我们可以在之前编译指定的目录,也就是/nginx目录下,看到四个文件夹,分别是conf,html,logs以及sbin。其中sbin内部保存了我们编译后的nginx可执行文件,我们对于nginx服务的一切操作都要使用这个nginx可执行文件。

conf目录下有一个nginx.conf,我们就需要在这里对nginx进行配置,里面的初始内容如下:

可以看到,nginx的配置也是基于模块的,从上至下,分别可以看到全局配置项,events模块,以及http模块。

http模块内部还要定义虚拟主机的配置,也就是server,虚拟主机可以有多个。server下配置了监听端口,域名,以及访问路径映射规则(location)。

我们直接通过/nginx/sbin/nginx,执行nginx可执行文件,启动nginx,然后直接通过http协议访问主机ip(不需要端口),看到如下页面,证明访问nginx成功。

 必须通过http访问,因为https写一下需要对数据进行加密传输,nginx默认没有开启ssl对数据加密,会导致三次握手失败,可以在server的listen配置端口后面加一个ssl启用ssl加密,不过还需要获取证书,过程繁琐,这里主要演示nginx的基本使用,不做过多说明。

http协议下默认访问80端口,所以通过http访问nginx所在地址时,不需要加端口。https默认访问443端口

server_name

通过配置server_name可以对访问客户端的域名进行限制。

精确匹配

通过指定明确的域名,来对域名进行限制,只有指定域名才能匹配到当前的虚拟主机。

server_name test.com www.test.com;

前置通配符匹配

server_name *.test.com;

后置通配符匹配

server_name www.test.*

 正则表达式匹配

server_name ~^www\.(.+)\.com$;

默认服务器

默认服务器通过在listen配置的末尾添加default_server实现,当所有服务器都匹配失败时,则会由默认服务器处理。

listen 80 default_server;

从上至下优先级以此递减,当相同类型的匹配都匹配成功时,会选择固定部分最多的那个服务器,比如前置通配符匹配,*.test.com和*.com都匹配到www.test.com时,*.test.com服务器生效。

localtion

匹配URI

location配置URI匹配大致有五种方式,如下:

1. 精确匹配

通过 localtion = URI 来实现对URI的精确匹配。精确匹配下,URI必须相同,并且这种方式的优先级最高,优先进行匹配。

location = /test {
    # 精确匹配 /
}
2. 前缀通配符

通过 location ^~ /test 方式,可以匹配以/test开头的URI,匹配优先级第二。

location ^~ /test {
    # 直接匹配以 /test 开头的 URI
}
3. 正则表达式匹配

可以通过正则表达式,以location ~ \.test$的形式来匹配以.test结尾的URI,~*为不区分大小写。匹配优先级第三。

location ~ \.test$ {
    # 匹配所有以 .test 结尾的 URI,区分大小写
}

location ~* \.TeSt$ {
    # 匹配所有以 .test 结尾的 URI,不区分大小写
}
4. 前缀匹配

通过location /test,中间不加任何修饰符,代表怕匹配所有以/test开头的URI,虽然和前缀通配符匹配功能相同,不过前缀匹配优先级低于正则表达式,可以看实际情况选择使用。匹配优先级第四。

location /test {
    # 匹配 /test 开头的路径
5. 通用匹配

location /匹配所有,优先级最低。

精确匹配

upstream

nginx作为反向代理服务器,提供了多种负载均衡的策略,可以通过在http模块配置下的upsteam配置项,配置所有服务地址的列表,然后在location内部通过porxy_pass配置这个服务器列表来开启负载均衡,其中默认为轮询。

轮询

沦胥为默认的负载均衡策略,无需配置。

权重

权重通过在upsteam中配置的地址列表后面,通过weight=n来给对应服务设置权重,nginx就会根据内置的权重算法进行负载均衡。

upstream myapp {
        server ip1:port weight=3;
        server ip2:port weight=2;
        server ip3:port weight=1;
    }

最少连接

选择连接数最少的服务进行负载均衡,可以防止某些连接时间过长导致服务器压力过大。可以通过在upsteam下添加least_conn开启。

upstream myapp {
    least_conn;
    server ip1;port;
    server ip1;port;
    server ip1;port;
}

IP哈希

通过IP哈,可以保证一个ip固定被分配相同的服务器,可以用需要保持会话的需求。通过在upsteam下添加ip_hash开启;

upstream myapp {
    ip_hash;
    server ip1;port;
    server ip1;port;
    server ip1;port;
}

upsteam还可以在服务地址后面添加down代表服务不可用,以及添加backup代表服务为备用服务,其他服务都不可用时才开启。

除此之外,还有大量的模块配置,没有办法一一全部说明,可以在实际生产中用到哪个,搜索哪个。

  • 29
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不止会JS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值