Nginx-简介

用Python语言开发的站点使用的Web服务器主要有Nginx、Apache以及淘宝的Tengine。Nginx是由Igor Sysoev在2004年发布的一个开源、高性能的HTTP服务器和反向代理,它还可以用来作为IMAP/POP3的代理服务器。它能被广泛使用,有如下原因:

  • 作为Web服务器,它处理静态文件、索引文件的效率非常高
  • Nginx的设计非常注重效率,它支持epoll/kqueue等网络I/O模型,可以最大支持5W个并发连接,并且只占用很少的内存资源。
  • 稳定性高,宕机的概率很低
  • 强大的反向代理和负载均衡功能,平衡集群中各个服务器的负载压力
  • 配置简单。配置文件通俗易懂,上手很容易
  • 支持热部署,可以在不间断服务器的情况下对软件进行升级。
  • 提供健康检查支持,当后端出现问题时,就不再往这个后端分发请求,并且还会做后续的检查,知道这个后端恢复正常。

Nginx模块化

Nginx模块化的思想是一个很久的概念,但也正是成熟的思想照就了Nginx的巨大优越性。我们知道Nginx从总体上来讲是由许多个模块构成的。习惯将Nginx分为5大模块:核心模块,标准HTTP模块,可选HTTP模块,邮件服务模块和第三方模块。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F6z6fsqp-1571049706679)(https://github.com/Mr-ycx/Resources/blob/master/nginx_server.png?raw=true)]

5个模块重要性依次递减

  • 核心模块:核心模块是Nginx服务器正常运行必不可少的一个模块,它如同系统的内核。它提供了Nginx最基本的服务,像进程管理,权限控制和错误日志等
  • 标准HTTP模块:标准HTTP模块支持标准HTTP的功能
  • 可选HTTP模块:可选HTTP模块主要用于拓展标准的HTTP功能,让Nginx处理一些特殊的服务
  • 邮件服务模块:邮件服务模块主要用于支持Nginx的邮件服务
  • 第三方模块:第三方模块是为了拓展Nginx服务器的应用,完成开发者想要的功能

反向代理和正向代理

正向代理,作为一个媒介将互联网上获取的资源返回给相关联的客户端。代理和客户端在一个局域网,对于服务端是透明的。反向代理,根据客户端的请求,从后端的服务器上获取资源,然后再将这些资源返回给客户端。代理和服务器在一个局域网,对客户端是透明的。Nginx是反向代理的最佳选择,那么为什么需要反向代理呢?反向代理有如下作用:

  • 提高动态语言的I/O处理能力,Python、PHP、Java这样的动态服务的I/O处理能力不高,反向代理可以缓冲请求,交给后端一个完整的HTTP请求,同样,Nginx也可以缓冲响应,也达到了减轻后端的压力。
  • 加密和SSL加速
  • 安全。它保护和隐藏了原始资源服务器,还可以用作应用防火墙防御一些网络攻击。
  • 负载均衡。它帮应用服务器分配请求,以达到资源使用率最佳、吞吐率最大、响应时间最小的目的
  • 缓存静态内容。代理缓存通常可以满足相当数量的网站请求,大大降低应用服务器上的负载
  • 支持压缩。通过压缩优化可以提高网站访问速度,还能大大减少宽带的消耗

安装

apt-get install nginx

安装程序把Nginx以服务的形式安装在系统中,相关的程序及程序文件路径如下:

  • 程序文件:/usr/sbin/nginx
  • 全局配置文件:/etc/nginx/nginx.conf
  • 访问日志文件:/var/log/nginx/access.log
  • 错误日志文件:/var/log/nginx/error.log
  • 站点配置文件:/etc/nginx/sites-enabled/default

全局配置与站点配置

Nginx安装后以默认的方式启动,在开发调试的过程中可能需要调整Nginx的运行参数,这些运行参数通过全局配置文件(nginx.conf)和站点配置文件(sites-enabled/*)进行设置。对全局配置文件(/etc/nginx/nginx.conf)中关键可设置参数解析如下:

# 定义运行Nginx的用户
user www-data;    

# Nginx进程数,应设置与系统CPU数量相等的数值
worker_processes 4;

# 每个Nginx进程可以打开的最大文件数
worker_rlimit_nofile 65535;

events {
    # 每个Nginx进程允许最大客户端连接数
    worker_connections 768;
    
    # 在Nginx接到一个新连接通知后调用accept()来接收尽量多的连接
    multi_accept off;
}

http {
    # 是否允许文件上传
    sendfile on;
    
    # 上传文件大小限制
    client_header_buffer_size 32k;
    
    # 防止网络阻塞
    tcp_nopush on;
    
    # 防止网络阻塞
    tcp_nodelay on;
    
    # 允许客户端长连接最大秒数
    keepalive_timeout 65;
    
    # Nginx散列表大小。值越大,占用的内存空间越大,但路由速度越快
    types_hash_max_size 2048;
    
    # 访问日志文件路径名
    access_log /var/log/nginx/access.log;
    
    # 错误日志文件路径名
    error_log /var/log/nginx/error.log
    
    # include命令加载站点配置文件
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

在每个Nginx服务器中可以运行多个Web站点,每个站点的配置通过站点配置文件设置。每个站点应该以一个单独的配置文件存放在/etc/nginx/sites-enabled 目录中,默认站点的配置文件名为/etc/nginx/sites-enabled/default,对其中关键内容的解析如下:

server {
    # 配置站点监听的端口
    listen 80;
    
    # 配置HTTP根页面目录
    root /usr/share/nginx/html;
    
    # 配置HTTP根目录中的默认页面
    index index.html index.html;
 
    # 站点监听的IP地址,默认的localhost只可用于本机访问,一般需要将其更改为真实IP
    server_name localhost;
    
    # location 用于配置URL的转发接口
    location /user/ {
        # 此处配置http://server_name/user/的转发地址
        proxy_pass http://127.0.0.1:8080;
    }
    
    # 错误页面配置,如下配置定义HTTP 404错误的显示页面为/404.html
    error_page 404 /404.html;
}

检查Nginx配置文件的语法

nginx -t -c /etc/nginx/nginx.conf

启动Nginx服务器

sudo service nginx start

查看Nginx服务的状态

sudo service nginx status

停止Nginx服务器

sudo service nginx stop

重启Nginx服务器

sudo service nginx restart

你可能感兴趣的:(nginx)