• Nginx学习使用


    介绍

    Nginx是世界上第二大Web服务器,其他Web服务器有:Apache、Lighttpd、Tomcat、Jetty、IIS。

    区别:

    • Tomcat、Jetty面向Java语言,先天就是重量级的Web服务器,他们的性能与Nginx没有可比性;
    • IIS只能在Windows操作系统上运行;
    • Apache发展时期最长,是毫无争议的第一大Web服务器,然而它被设计为一个重量级的、不支持高并发的Web服务器,这决定了Apache不可能成为高性能Web服务器。
    • Nginx是俄罗斯的Igor Sysoev用C语言开发的 跨平台的支持高并发的Web服务器,以性能为王。

    特点:

    • 更快。一方面单次请求将会得到更快的响应;另一方面 在数以万计的并发请求时,Nginx比其他Web服务器更快的响应请求。
    • 高扩展性。它完全由不同功能、不同层次、不同类别且耦合度极低的模块组成。
    • 高可靠性。nginx的高可靠性来自于其核心框架代码的优秀设计、模块设计的简单性。
    • 低内存消耗。1万个非活跃的Http Keep-Alive连接在Nginx中仅消耗2.5MB的内存,这是nginx支持高并发连接的基础。
    • 单机支持10万以上的并发连接。
    • 热部署。7X24小时不间断的服务的前提下,升级nginx的可执行文件。
    • 最自由的BSD许可协议。用户不仅免费使用nginx,而且可以参与修改源代码

     选择Nginx的核心理由是:它能够在支持高并发请求的同时 保持高效的服务。Nginx先天的事件驱动型设计、全异步的网络I/O处理机制、极少的进程间切换以及许多优化设计,使得它天生善于处理高并发压力下的互联网请求。

    安装和常用命令 

    以Linux(Ubuntu)为例,Nginx的软件包在Ubuntu默认软件仓库中可用。 安装非常简单,只需键入以下命令:

    sudo apt update
    sudo apt install nginx

    安装后,配置文件默认位置   /etc/nginx/nginx.conf

    安装完成后,请检查Nginx服务的状态和版本:sudo systemctl status nginx

    查看版本:sudo nginx -v

    • 使用systemctl管理Nginx服务

    您可以像任何其他systemd单位一样管理Nginx服务。 要停止Nginx服务,请运行:sudo systemctl stop nginx

    要再次启动,请键入:sudo systemctl start nginx

    重新启动Nginx服务:sudo systemctl restart nginx

    在进行一些配置更改后重新加载Nginx服务:sudo systemctl reload nginx

    • 也可以使用service管理Nginx服务

    停止Nginx服务,请运行:sudo service nginx stop

    Nginx的配置

     Nginx有很多的模块,这些模块可以帮助我们实现Web服务器上很多的功能。使用这些模块时,仅仅需要增加、修改一些配置项即可。

    运行中的Nginx进程间的关系:部署Nginx时 都是使用一个master进程来管理多个worker进程,一般情况下,worker进程的数量与服务器上的CPU核心数相等。(这样进程间切换的代价是最小的)

    配置的通用语法:

    • 块配置项:{}括起来的
    • 配置项的语法格式:配置项名 配置项值1 配置项值2 ;   【空格作为分隔符,多个值之间也是空格,最后以分号结尾】
    • 配置项的注释:# 开头

    Nginx服务的基本配置

    基本配置是其他模块执行时都依赖的配置项。分为以下4类:

    1、用于调试、定位问题的配置项;

    (1) 是否以守护进程方式运行Nginx

    daemon on|off  默认是on,且配置文件中不用写

    (2)是否以master/worker方式工作

    master_process on|off  默认是on

    (3)error日志的设置

    error_log  logs/error.log  error   【分别是 路径和级别,当设置为error级别时,debug和info的日志则不会输出到文件中】

    2、正常运行的必备配置项;

    (1)定义环境变量

    env VAR= Value;

    (2)嵌入其他配置文件

    include /path/file;   可以将其他配置文件嵌入到当前的nginx.conf文件中,可以是绝对路径,也可以相对路径

    (3)pid文件的路径

    pid path/file;  保存master进程ID的pid文件存放路径。

    默认:pid logs/nginx.pid;

    (4)Nginx worker进程运行的用户及用户组

    user ;username [groupname];    

    user用于设置master进程启动后,fork出的worker进程运行在哪个用户和用户组下。

    默认:user nobody nobody;

    3、优化性能的配置项;

    (1)worker进程个数

    worker_processes number;

    默认 number=1 ,一般cpu核心数为几则设置为多少

    (2)绑定worker进程到指定的CPU内核 。eg:

    worker_processes 4;

    worker_cup_affinity 1000 0100 0010 0001;

    4、事件类配置项;

    (1)每个worker的最大连接数

    worker_connections number;

    用HTTP核心模块配置一个静态Web服务器

    静态Web服务器的主要功能有ngx_http_core_module模块(HTTP框架的主要成员)实现。Nginx为配置一个完整的静态Web服务器提供了非常多的功能,把这些配置项分为以下8类:

    (1)虚拟主机与请求的分发

    http块中的每个Server就是一个虚拟主机,它只处理与之对应的主机域名请求。所以以下配置均是在Server块中。

    1、监听端口

    默认:listen 80;

    listen参数决定Nginx服务如何监听端口。在listen后可以只加IP地址、端口或者主机名,非常灵活。eg:

    listen 127.0.0.1:8000;

    listen 8000;

    listen localhost:8000;

    设置默认虚拟主机,listen后加default或者default_server,将所在的server块作为整个Web服务的默认server块。

    2、主机名称

    默认:server_name "";

    可以设置多个主机名称,eg:server_name localhost www.testweb.com download.testweb.com;

    在处理HTTP请求时,nginx会取出header头中的Host,与每个server中的server_name进行匹配,

    3、location

    语法:location [=|~|~*|^~|@] /uri/ {...}

    location会尝试根据用户请求中的URI来匹配上面的/uri表达式,如果可以匹配,就选择location{} 块中的配置来处理用户请求。

    location / {

    # 这个配置可以匹配所有请求

    }

    (2)文件路径的定义

    1、以root方式设置资源路径

    root path;

    默认:root html;

    配置块:http、server、location、if

    eg:location /download {

    root /opt/web/html;}

    如果有一个请求的uri是/download/index/test.html,那么Web服务器将会返回服务器上/opt/web/html/download/index/test.html 文件的内容。

    2、访问首页

    index file...;

    默认:index index.html;

    eg:

    location /{

    root  path;

    index /index.html /html/index.php;}   请求的文件是path/index.html ,若不存在,则访问配置的第二个文件。

    3、根据HTTP返回码重定向页面

    例如:error_page 404 /404.html

    (3)内存及磁盘资源的分配

    用HTTP proxy module配置一个反向代理服务器

     反向代理(reverse proxy)方式是指 用代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络中的上游服务器来处理。此时代理服务器对外的表现就是一个Web服务器。

    Nginx通常可以配置为静态的Web服务器,也可以配置为反向代理服务器。

    负载均衡的基本配置

    作为代理服务器,一般都需要向上游服务器的集群转发请求。这里的负载均衡是指:选择一种策略,尽量把请求平均地分到每一台上游服务器上。

    (1)upstream块

    语法:upstream name {...}

    配置块:http 即upstream是位于HTTP块中的

    upstream块定义了一个上游服务器的集群,便于反向代理中的proxy_pass使用。

    eg:upstream backend{

    server  backend1.example.com;

    server  backend2.example.com;

    }

    (2)server

    配置块:upstream块

    语法:server name [parameters];

    name可以是域名、ip地址端口;

    参数,可以是 weight=number,设置这台上游服务器转发的权重,默认为1;

    ....

    反向代理的基本配置

    (1)proxy_pass

    语法:proxy_pass URL;

    配置块:location,if

    将当前请求反向代理到URL参数指定的服务器上,可以是主机名 或者IP地址加端口,还可以是负载均衡的upstream块名,eg:proxy_pass http://backend;

    默认情况下,反向代理是不会转发请求中的Host头部的。如果需要转发,那么必须加上配置:

    proxy_set_header Host $host; 

    kill -9杀掉nginx主进程、reload失败解决办法 

    kill -9 5767 14801

  • 相关阅读:
    android 布局 使用 viewPager 时,如何解决 和 子页面 长按滑动 冲突问题
    C++ 与 php 的交互 之----- C++ 异步获取 网页文字内容,异步获取 php 的 echo 值。
    站在巨人的肩膀上---重新自定义 android- ExpandableListView 收缩类,实现列表的可收缩扩展
    C/C++ char a[ ] 和 char *a 的差别,改变 char *a爆内存错误的原因
    android 真机调试出现错误 INSTALL_FAILED_INSUFFICIENT_STORAGE 的解决方法。
    android 如何获取手机的图片、视频、音乐
    《C程序设计语言》练习1-5
    《C 程序设计语言》练习1-4
    《C 程序设计语言》练习1-3
    关于 Cantor 集不可数的新观点
  • 原文地址:https://www.cnblogs.com/peterYong/p/12158904.html
Copyright © 2020-2023  润新知