Nginx基础教程(1)Nginx简介:Nginx深度指南:从零入门到实战配置

网上总有人说Nginx很厉害,于是我也去下载了一个。结果刚看完配置文件,就感觉有点头大——这玩意儿怎么比我的代码还难懂?

什么是Nginx?

Nginx(发音为“engine X”)是由俄罗斯人Igor Sysoev开发的一款高性能HTTP和反向代理服务器。它的第一个公开版本0.1.0发布于2004年10月4日,最初是为了解决著名的C10k问题(即同时处理1万个客户端连接)而设计的。

与传统服务器不同,Nginx不依赖线程来处理请求,它使用了更可扩展的事件驱动架构(异步)。这种架构使用小量且可预测的内存。即使在负载下,其内存占用也很小。这意味着Nginx可以从最小的VPS一直扩展到大型服务器集群。

如今,Nginx已经驱动了超过40%的全球前1000网站,成为了Web服务器市场的重要一员。

Nginx vs Apache:为什么选择Nginx?

你可能会问,已经有了Apache这样成熟的Web服务器,为什么还要选择Nginx?让我们来简单对比一下:

  • Apache:更稳定,处理动态请求时性能更高,rewrite模块更完善,模块众多。
  • Nginx:轻量级,占用资源少,非阻塞异步网络IO模型(epoll),适合高并发场景;处理静态文件时表现更佳,反向代理和负载均衡性能强。

简单来说,如果你需要处理大量并发连接,或者想要构建一个高性能的反向代理和负载均衡器,Nginx通常是更好的选择。

Nginx的架构设计

Nginx有一个主进程(master process)和一个或多个工作进程(worker processes)。主进程的主要目的是读取和评估配置,以及维护工作进程。工作进程则执行请求的实际处理。

这种架构设计带来了几个关键优势:

  • 高可靠性:master-worker模式提高了可靠性。
  • 低内存消耗:10000个keep-alive模式下的连接仅需要约2.5MB的内存。
  • 热部署能力:可以不停机更新配置文件、滚动日志文件、升级程序版本。

安装Nginx

环境准备

在Linux系统中安装Nginx前,需要先安装必要的依赖包:

  • 对于基于RPM的系统(如CentOS):gcc、pcre-devel、zlib-devel、openssl-devel等。
  • 对于基于Debian的系统(如Ubuntu):build-essential、libpcre3-dev、libz-dev、libssl-dev等。

同时,建议创建一个无法本地登录的用户,专门用于运行Nginx服务。

编译安装Nginx

虽然很多Linux发行版提供了预编译的Nginx包,但编译安装可以让你自定义需要的模块:

  1. 下载Nginx源码包并解压。
  2. 执行./configure命令配置Nginx安装选项。
  3. 使用makemake install命令编译并安装Nginx。

安装完成后,可以创建软链接,方便在命令行中直接调用Nginx命令。

Nginx基础配置

配置文件结构

Nginx的配置文件通常位于/usr/local/nginx/conf/etc/nginx/usr/local/etc/nginx目录中,默认名为nginx.conf

配置文件由指令上下文构成:

  • 指令:包含名称和参数,以分号结尾。
  • 上下文:分块,你可以在其中声明指令——类似于编程语言中的作用域。

Nginx的配置段主要有以下几项:

  1. main配置段:全局配置段。
  2. event:定义event模型工作特性。
  3. http{}:定义http协议相关的配置。

配置文件主要由简单指令块指令构成。简单指令由名称和用空格分隔的参数组成,并以分号(;)结尾。块指令与简单指令具有相同的结构,但它不是以分号结尾,而是以一组用大括号({和})括起来的其他指令结尾。如果块指令可以在大括号内包含其他指令,则称为上下文(例如:events、http、server和location)。

基本命令

掌握了配置文件结构后,我们来看看如何控制Nginx:

启动Nginx
要启动Nginx,只需运行可执行文件:

nginx

控制运行中的Nginx实例
启动Nginx后,可以通过使用-s参数调用可执行文件来控制它:

nginx -s signal

其中信号可以是以下之一:

  • stop — 快速关闭
  • quit — 优雅关闭
  • reload — 重新加载配置文件
  • reopen — 重新打开日志文件

例如,要优雅地停止Nginx进程(等待工作进程完成当前请求的服务),可以执行:

nginx -s quit

也可以使用Unix工具(如kill实用程序)向Nginx进程发送信号。例如,如果主进程ID为1628,要发送QUIT信号导致Nginx优雅关闭,请执行:

kill -s QUIT 1628

要获取所有正在运行的Nginx进程的列表,可以使用ps实用程序:

ps -ax | grep nginx

实战示例:配置一个静态Web服务器

理论说了这么多,让我们来动手配置一个实际的静态Web服务器。

创建静态内容

首先,创建两个目录来存放我们的静态内容:

mkdir -p /data/www
mkdir -p /data/images

/data/www目录中创建一个index.html文件,并添加一些简单的HTML内容。同时,在/data/images目录中放置一些图片文件。

配置Nginx

接下来,编辑Nginx配置文件,设置http块内的server块以及两个location块:

http {
    server {
        location / {
            root /data/www;
        }

        location /images/ {
            root /data;
        }
    }
}

这个配置做了以下事情:

  1. 定义一个处理HTTP请求的虚拟服务器。
  2. 对于URI以/images/开头的请求,服务器将从/data/images目录发送文件。例如,请求https://127.0.0.1/images/example.png将发送文件/data/images/example.png
  3. 对于其他请求,它们将映射到/data/www目录。例如,请求https://127.0.0.1/some/example.html将发送文件/data/www/some/example.html

应用配置

要应用新配置,如果尚未启动Nginx,请启动它;或者如果Nginx已在运行,通过执行以下命令向Nginx的主进程发送reload信号:

nginx -s reload

如果某些内容无法按预期工作,可以尝试在/usr/local/nginx/logs/var/log/nginx目录中的access.logerror.log文件中查找原因。

进阶配置:反向代理服务器

Nginx的另一个常见用途是作为反向代理服务器。这意味着它接收请求,将请求传递给代理服务器,从中检索响应并将其发送给客户端。

配置后端服务器

首先,我们通过向Nginx的配置文件添加另一个server块来定义一个代理服务器:

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

这是一个监听端口8080的简单服务器,它将所有请求映射到本地文件系统上的/data/up1目录。创建此目录并将index.html文件放入其中。

配置代理服务器

接下来,修改之前的服务器配置,使其成为代理服务器配置:

server {
    location / {
        proxy_pass https://127.0.0.1:8080;
    }

    location ~ \.(gif|jpg|png)$ {
        root /data/images;
    }
}

这个配置做了以下事情:

  1. 在第一个location块中,使用proxy_pass指令指定代理服务器的协议、名称和端口(在本例中为https://127.0.0.1:8080)。
  2. 第二个location块使用正则表达式匹配所有以.gif、.jpg或.png结尾的URI。相应的请求将映射到/data/images目录。

高级功能:负载均衡

Nginx还支持负载均衡,可以将流量分发到多个后端服务器。Nginx支持多种负载均衡算法,如轮询权重ip_hash等。

配置负载均衡

以下是一个负载均衡的配置示例:

upstream backend_servers {
    server 192.168.1.100:8080;
    server 192.168.1.101:8080;
}

server {
    listen 80;
    server_name example.com;
    
    location / {
        proxy_pass http://backend_servers;
    }
}

在这个配置中:

  1. upstream块定义了一组后端服务器。
  2. Nginx会将进入的请求按照轮询算法分发到这些服务器。
  3. 你还可以为不同的服务器指定权重,使某些服务器处理更多的请求。

负载均衡策略

Nginx支持多种负载均衡策略:

  • 轮询:默认方式,逐一转发,适用于无状态请求。
  • weight(权重):指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
  • ip_hash:根据客户端的ip地址转发同一台服务器,可以保持会话。
  • least_conn:最少连接访问。
  • fair:根据后端服务器响应时间转发请求。

性能优化技巧

调整工作进程

在Nginx配置中,有几个与性能相关的重要参数:

worker_processes auto;
worker_connections 1024;
  • worker_processes:指定Nginx进程数,建议按照CPU核心数目来指定,一般为它的倍数。例如,对于2个四核的CPU,可以设置为8。设置为auto表示自动调整到可用CPU核心的数量。
  • worker_connections:设置单个worker进程所能够处理的最大并发连接数量。

启用Gzip压缩

启用Gzip压缩可以减少传输数据量,提高响应速度:

gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

启用缓存

对于静态资源,可以设置缓存头,减少客户端重复请求:

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
    add_header Cache-Control "public, immutable";
}

故障排除

当Nginx配置出现问题时,可以查看日志文件来定位问题:

  • 错误日志:通常在/usr/local/nginx/logs/var/log/nginx目录中的error.log文件。
  • 访问日志:在相同目录下的access.log文件,记录所有客户端请求。

Nginx提供了不同日志级别:debug | info | notice | warn | error | crit | alert | emerg。若要使用debug级别,需要在编译Nginx时使用--with-debug选项。

总结

通过本教程,你已经了解了Nginx的基本概念、安装方法、配置文件结构,并学会了如何配置静态Web服务器、反向代理和负载均衡。你还学习了一些性能优化技巧和故障排除方法。

Nginx的强大之处远不止于此——它还可以实现动静分离高可用性SSL终端代理等高级功能。但掌握了本教程的基础知识后,你已经具备了进一步探索的能力。

记住,Nginx的配置是一个渐进的过程,不要期望一开始就完美。从简单的配置开始,逐步测试和调整,你很快就会熟练驾驭这个强大的Web服务器。

Nginx配置文件的核心结构,就像搭积木一样简单。首先,main全局配置是基础;接着,events块定义连接处理方式;然后,在http块内,可以定义一个或多个server虚拟主机;每个server中又可以包含多个location来处理特定请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

值引力

持续创作,多谢支持!

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

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

打赏作者

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

抵扣说明:

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

余额充值