Nginx的简介与部署

Nginx的简介与部署

码农世界 2024-05-28 后端 94 次浏览 0个评论

文章目录

  • Nginx简介
    • 特点
    • 优缺点
      • 优点:
      • 缺点:
      • 应用场景
      • 安装与部署
      • Nginx的配置文件
        • Nginx的默认配置文件
        • Nginx的子配置文件

          Nginx简介

          Nginx是一款高性能的HTTP和反向代理Web服务器,同时也是一个IMAP/POP3/SMTP代理服务器。它由俄罗斯人伊戈尔·赛索耶夫开发,旨在为Rambler.ru站点提供高效、稳定的服务。Nginx因其稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而备受赞誉。

          特点

          1. 跨平台:Nginx可以在大多数Unix-like操作系统上编译运行,并且也有Windows的移植版本,具有良好的跨平台兼容性。
          2. 配置简单:Nginx的配置风格与程序开发相似,使得配置变得非常容易上手。

            非阻塞、高并发连接:Nginx使用最新的epoll模型,能够支撑高达5万的并发连接,并在实际生产环境中表现出色,通常可以处理2~3万的并发连接数。

          3. 事件驱动:Nginx的通信机制采用epoll模型,支持更大的并发连接。

            master/worker结构:Nginx采用一个master进程生成一个或多个worker进程的模式,提高了处理效率。

          4. 内存消耗小:在处理大并发的请求时,Nginx的内存消耗非常小。
          5. 节省带宽:Nginx支持GZIP压缩,可以添加浏览器本地缓存的Header头,有助于节省带宽。

          优缺点

          Nginx的优缺点分别如下:

          优点:

          1. 高性能:Nginx使用事件驱动架构,能够处理大量并发连接,适用于高负载场景。其异步非阻塞的工作方式使得其处理请求无需等待,从而提高了服务器的吞吐能力。
          2. 稳定性好:Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器,具有高可用性和可扩展性,被广泛应用于大型网站和应用中。
          3. 配置简单:Nginx的配置文件简洁明了,易于理解和修改。它支持多种配置语法,包括基于位置、基于域名、基于正则表达式等,可以灵活地满足不同的需求。
          4. 模块化设计:Nginx采用模块化设计,支持丰富的模块和插件生态系统,可以扩展其功能和性能,满足各种不同的需求。
          5. 支持热部署:Nginx支持热部署,可以在不停止服务的情况下更新配置文件或升级Nginx版本,方便维护和升级。
          6. 内存消耗小:Nginx在处理大量并发连接时,内存消耗相对较小,这使得它能够在有限的资源下提供更高的性能。

          缺点:

          1. 仅支持HTTP、HTTPS和Email协议,不支持其他应用层协议,如FTP等。这使得Nginx的应用场景受到一定的限制。
          2. 动态处理能力相对较弱:虽然Nginx可以通过FastCGI等方式与后端应用服务器进行通信,但相对于专业的应用服务器如Tomcat、Resin等,其动态处理能力相对较弱。
          3. 调试困难:Nginx的错误日志相对简单,对于复杂的故障排查和调试可能不够方便。
          4. 学习成本高:虽然Nginx的配置文件简洁明了,但对于初学者来说,理解其工作原理和配置方式可能需要一定的时间和经验积累。
          5. 控制功能相对较少:Nginx的控制功能相对较少,例如对于访问控制、安全策略等方面的支持不如专业的Web应用防火墙或负载均衡器强大。

          需要注意的是,以上优缺点是基于Nginx的一般特性和应用场景进行描述的,具体使用时还需根据实际需求和环境进行评估。同时,随着Nginx版本的不断更新和发展,其功能和性能也在不断改进和提升。

          应用场景

          Nginx的应用场景非常广泛,包括但不限于以下几个方面:

          1. 静态文件服务:Nginx在提供静态资源服务方面效率很高,可以快速响应大量的静态请求,减轻其他动态服务器的负担,如CSS、JavaScript、Image、Audio和Video文件等。
          2. 反向代理和负载均衡:Nginx可以作为反向代理服务器,通过优化请求的分配和处理方式,平均分配后端服务器的负载,提高系统的可用性和可靠性,使其更稳定。
          3. 缓存服务器:Nginx可以缓存一些响应结果,降低后端服务器的负载,提高数据的访问速度,平衡访问压力等。
          4. SSL加速:Nginx可以通过HTTPS访问加速,提高HTTPS访问的性能,减少SSL负载压力,保证数据的安全性。
          5. WebSocket:Nginx支持WebSocket协议,可用于实时通信应用程序。
          6. 访问控制和安全: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 这两个域名。

          这只是一个简单的例子,实际的子配置文件可能会更加复杂,并且包含更多的配置选项和指令。

转载请注明来自码农世界,本文标题:《Nginx的简介与部署》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,94人围观)参与讨论

还没有评论,来说两句吧...

Top