文章目录
- Nginx简介
- 特点
- 优缺点
- 优点:
- 缺点:
- 应用场景
- 安装与部署
- Nginx的配置文件
- Nginx的默认配置文件
- Nginx的子配置文件
Nginx简介
Nginx是一款高性能的HTTP和反向代理Web服务器,同时也是一个IMAP/POP3/SMTP代理服务器。它由俄罗斯人伊戈尔·赛索耶夫开发,旨在为Rambler.ru站点提供高效、稳定的服务。Nginx因其稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而备受赞誉。
特点
- 跨平台:Nginx可以在大多数Unix-like操作系统上编译运行,并且也有Windows的移植版本,具有良好的跨平台兼容性。
- 配置简单:Nginx的配置风格与程序开发相似,使得配置变得非常容易上手。
非阻塞、高并发连接:Nginx使用最新的epoll模型,能够支撑高达5万的并发连接,并在实际生产环境中表现出色,通常可以处理2~3万的并发连接数。
- 事件驱动:Nginx的通信机制采用epoll模型,支持更大的并发连接。
master/worker结构:Nginx采用一个master进程生成一个或多个worker进程的模式,提高了处理效率。
- 内存消耗小:在处理大并发的请求时,Nginx的内存消耗非常小。
- 节省带宽:Nginx支持GZIP压缩,可以添加浏览器本地缓存的Header头,有助于节省带宽。
优缺点
Nginx的优缺点分别如下:
优点:
- 高性能:Nginx使用事件驱动架构,能够处理大量并发连接,适用于高负载场景。其异步非阻塞的工作方式使得其处理请求无需等待,从而提高了服务器的吞吐能力。
- 稳定性好:Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器,具有高可用性和可扩展性,被广泛应用于大型网站和应用中。
- 配置简单:Nginx的配置文件简洁明了,易于理解和修改。它支持多种配置语法,包括基于位置、基于域名、基于正则表达式等,可以灵活地满足不同的需求。
- 模块化设计:Nginx采用模块化设计,支持丰富的模块和插件生态系统,可以扩展其功能和性能,满足各种不同的需求。
- 支持热部署:Nginx支持热部署,可以在不停止服务的情况下更新配置文件或升级Nginx版本,方便维护和升级。
- 内存消耗小:Nginx在处理大量并发连接时,内存消耗相对较小,这使得它能够在有限的资源下提供更高的性能。
缺点:
- 仅支持HTTP、HTTPS和Email协议,不支持其他应用层协议,如FTP等。这使得Nginx的应用场景受到一定的限制。
- 动态处理能力相对较弱:虽然Nginx可以通过FastCGI等方式与后端应用服务器进行通信,但相对于专业的应用服务器如Tomcat、Resin等,其动态处理能力相对较弱。
- 调试困难:Nginx的错误日志相对简单,对于复杂的故障排查和调试可能不够方便。
- 学习成本高:虽然Nginx的配置文件简洁明了,但对于初学者来说,理解其工作原理和配置方式可能需要一定的时间和经验积累。
- 控制功能相对较少:Nginx的控制功能相对较少,例如对于访问控制、安全策略等方面的支持不如专业的Web应用防火墙或负载均衡器强大。
需要注意的是,以上优缺点是基于Nginx的一般特性和应用场景进行描述的,具体使用时还需根据实际需求和环境进行评估。同时,随着Nginx版本的不断更新和发展,其功能和性能也在不断改进和提升。
应用场景
Nginx的应用场景非常广泛,包括但不限于以下几个方面:
- 静态文件服务:Nginx在提供静态资源服务方面效率很高,可以快速响应大量的静态请求,减轻其他动态服务器的负担,如CSS、JavaScript、Image、Audio和Video文件等。
- 反向代理和负载均衡:Nginx可以作为反向代理服务器,通过优化请求的分配和处理方式,平均分配后端服务器的负载,提高系统的可用性和可靠性,使其更稳定。
- 缓存服务器:Nginx可以缓存一些响应结果,降低后端服务器的负载,提高数据的访问速度,平衡访问压力等。
- SSL加速:Nginx可以通过HTTPS访问加速,提高HTTPS访问的性能,减少SSL负载压力,保证数据的安全性。
- WebSocket:Nginx支持WebSocket协议,可用于实时通信应用程序。
- 访问控制和安全:Nginx可以使用访问控制、基于IP地址的访问限制等来提高服务器的安全性,有效保护
总之,Nginx是一款非常稳定、高效的Web服务器和反向代理服务器,适用于大型高并发网站、在线视频、物联网、云计算等场景。其特点包括跨平台、配置简单、非阻塞、高并发连接、事件驱动、master/worker结构、内存消耗小、节省带宽等。同时,Nginx在静态文件服务、反向代理和负载均衡、缓存服务器、SSL加速、WebSocket、访问控制和安全等方面都有广泛的应用。
安装与部署
Nginx官网
yum安装
[root@nginx-71 ~]# vim /etc/yum.repos.d/nginx.repo [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
源码安装
# 打开所要安装的目录 cd /usr/local # 安装依赖包: yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel # 下载 nginx 安装包 wget http://nginx.org/download/nginx-1.24.0.tar.gz # 解压安装包 tar -xvf nginx-1.24.0.tar.gz make clean # 解压完成后,进入 nginx 下的目录 mv /usr/local/nginx-1.24.0 /usr/local/nginx cd /usr/local/nginx # 执行 configure 命令生成 MakeFile 文件,[options] 配置项可忽略 ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_auth_request_module --with-http_random_index_module # 执行 make 命令 make -j2 # 执行安装命令 make install # 查看是否安装完成(查看是否有 nginx 进程) ps -ef | grep nginx # 在当前目录下验证 nginx 配置文件是否正确 ./nginx -t # 在当前目录下启动 nginx 服务 ./nginx -c /usr/local/nginx/conf/nginx.conf # 在当前目录下重启 nginx 服务(可能存在 nginx.pid 报错的问题,可参考百度结果) ./nginx -s reload # 启动成功后再次查看 nginx 进程 ps -ef | grep nginx
Nginx的配置文件
Nginx的默认配置文件
[root@nginx-71 ~]# cat /etc/nginx/nginx.conf #运行nginx进程的用户是nginx user nginx; #设置nginx的工作进程数,auto表示nginx会自动检测并使用可用的CPU核心数 worker_processes auto; #设置错误日志的路径以及日志级别 error_log /var/log/nginx/error.log notice; #指定nginx主进程的pid(进程id)文件存放的位置 pid /var/run/nginx.pid; #定义事件模块的设置,这里设置了每个工作进程可以同时处理最大连接数为1024 events { worker_connections 1024; } #定义HTTP模块的设置 http { include /etc/nginx/mime.types; #包含MIME类型的定义文件 default_type application/octet-stream; #默认的MIME类型 #定义了一个名为main的日志格式,这个是包含了各种请求和响应的详细信息 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功能,可以高效发送文件 sendfile on; #tcp_nopush on; #设置长连接的超时时间 keepalive_timeout 65; #gzip on; 启用压缩 #包含 /etc/nginx/conf.d/ 目录下所有 .conf 结尾的配置文件 include /etc/nginx/conf.d/*.conf; }
Nginx的子配置文件
这里简单举例说明
server { #监听端口 listen 80; #两个域名 server_name example.com www.example.com; #root 指令指定了文档根目录,即网站文件存放的位置 root /var/www/example.com; #index 指令定义了当请求指向一个目录而非具体文件时,服务器默认返回的文件 index index.html index.htm; #location / 块定义了如何处理根路径的请求。在这里,它尝试返回请求的文件,如果文件不存在,则尝试返回目录下的 index.html 文件 location / { try_files $uri $uri/ /index.html; } #location /images/ 块定义了一个别名,它将 /images/ 路径的请求映射到 /path/to/images/ 目录下的实际文件,并且设置了图片文件的缓存过期时间为30天 location /images/ { alias /path/to/images/; expires 30d; } #location /api/ 块则是一个反向代理配置,它将所有到 /api/ 路径的请求转发到 backend_server_address 指定的后端服务器 location /api/ { proxy_pass http://backend_server_address; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #error_page 块定义了当发生特定HTTP错误时,服务器应返回的错误页面 error_page 404 /404.html; error_page 500 502 503 504 /50x.html; #location = /50x.html 块定义了当发生500系列错误时,服务器应从哪里找到对应的错误页面 location = /50x.html { root /var/www/example.com; } }
在这个例子中,server 块定义了一个虚拟主机,它监听80端口,并且响应 example.com 和 www.example.com 这两个域名。
这只是一个简单的例子,实际的子配置文件可能会更加复杂,并且包含更多的配置选项和指令。
还没有评论,来说两句吧...