• Nginx初步入门


    1.Nginx介绍

    官网:nginx.org

    Nginx (“engine x”) 是一个开源的、支持高性能、高并发的WWW服务和代理服务软件。
    它是由俄罗斯人IgorSysoev开发的,最初被应用在俄罗斯的大型网站www.rambler.ru上。
    

    2.Nginx3大主要功能

    1)网页服务:自身是静态Web服务,
    还支持动态Web服务
    PHP(fastcgi_pass)
    JAVA(proxy_pass)
    Python(uwsgi_pass)
    ==================================
    memcache(memcache_pass)
    ......
    
    2)负载均衡反向代理
    haproxy,lvs,F5,netscaler
    
    只支持http,现在tcp/udp。
    
    3)缓存服务器
    squid,varnish
    

    3.特点

    最大特点:静态小文件高并发,占用资源少。软件本身小。
    

    企业面试时需要解答如下Nginx HTTP服务器的特色及优点:

    1)支持高并发:能支持几万并发连接(特别是静态小文件业务环境)。
    2)资源消耗少:在3万并发连接下,开启10个Nginx线程消耗不到200MB内存。
    3)可以做HTTP反向代理及加速缓存,即负载均衡功能,内置对RS节点服务
    器健康检查功能,这相当于专业的haproxy软件或lvs的功能。
    具备squid等专业缓存软件等的缓存功能。
    

    4.Nginx主要应用场景:

    1)静态Web服务器:
    使用Nginx运行HTML、JS、CSS、小图片等静态数据(此功能类似lighttpd软件)。
    
    2)配合运行动态Web服务器:
    Nginx结合FastCGI运行PHP等动态程序(例如使用fastcgi_pass方式)。
    Nginx结合proxy_pass支持Java动态程序(tomcat/resin服务)。Nginx结合uwsgi_pass支持Python。
    
    3)反向代理/负载均衡
     http负载均衡
    
    4)做Web缓存服务器(把文件放入内存里)。
    

    5.反向代理与负载均衡

    (1)正向代理:由内向外。 代替 效率低
    代替局域网内PC,请求外部应用服务。
    
    (2)反向代理:由外向内 代替 效率低
    代替外部的用户请求内部的应用服务器,也有负载均衡的功能,但不能混为一谈。
    
    (3)负载均衡:转发、效率高
    甩手掌柜。
    

    6.为什么Nginx总体性能比Apache高?

    (1)Nginx使用最新的epoll(Linux2.6内核)和kqueue(freebsd)异步网络I/O模型,而Apache则使用的是传统的select模型。目前Linux下能够承受高并发访问的Squid、Memcached软件都采用的是epoll模型。
    
    (2)Apache则使用的是传统的select模型,Nginx使用高并发的epoll模型
    
    (3)select模型:伙伴去宿舍找你,一个宿舍一个宿舍找。。效率低。
    (4)epoll模型: 伙伴去宿舍找你,先问宿管大妈,看看在哪间宿舍,然后直奔具体宿舍。效率高。
    

    7.软件安装方式

    (1)rpm安装
    优点:安装简单,速度快。
    缺点:依赖多,解决依赖困难繁琐。
    
    (2)yum安装
    优点:简单快,自动解决依赖。
    缺点:不能选择软件版本或软件存放路径。
    
    (3)编译安装(源码编译)
    缺点:安装速度慢,复杂,需要GCC编译器。
    优点:可以自定义安装(版本、软件路径)
    
    (4)将源码制作成rpm,然后放到yum仓库,实现yum自动安装。
    缺点:一次性慢,复杂
    优点:安装快,可以自定义安装(版本、软件路径)
    
    (5)二进制安装
    制作RPM YUM仓库搭建
    https://blog.oldboyedu.com/autodeploy-rpm/
    

    8. 安装Nginx

    nginx.org

    此处介绍两种安装方式

    (1)YUM安装
    yum安装又分为两种安装方式
    1)epel源安装,安装版本低。
    2)nginx官方源安装,版本高
    
    (2)编译安装
    

    8.1 YUM安装

    (1)配置nginx官网源
    image.png

    1)配置nginx.repo文件
    [root@web01 ~]# vim /etc/yum.repos.d/nginx.repo
    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/7/$basearch/
    gpgcheck=0
    enabled=1
    
    2)yum安装nginx,并启动
    [root@web01 ~]# yum -y install nginx
    
    3)检查是否安装成功
    [root@web01 ~]# rpm -qa nginx
    nginx-1.18.0-1.el7.ngx.x86_64
    
    4)启动nginx服务
    [root@web01 ~]# systemctl start nginx
    [root@web01 ~]# systemctl enable nginx
    
    5)检查端口
    [root@web01 ~]# netstat -lntup|grep 80
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      6825/nginx: master
    

    6)浏览器访问测试
    访问成功

    8.2 编译安装

    (1)下载nginx的rpm包
    image.png
    image.png

    [root@web01 ~]# mkdir -p /server/tools
    [root@web01 ~]# cd /server/tools
    [root@web01 /server/tools]# wget http://nginx.org/download/nginx-1.18.0.tar.gz
    [root@web01 /server/tools]# ll -h
    total 1016K
    -rw-r--r-- 1 root root 1016K Apr 21 22:33 nginx-1.18.0.tar.gz
    

    (2)安装依赖

    1)安装Nginx所需的PCRE库
    安装pcre库是为了使nginx支持具备URL重写功能的Rewrite模块(伪静态)。
    
    [root@web01 /server/tools]# yum -y install pcre pcre-devel
    
    2)安装openssl-devel
    Nginx在使用https功能时要用到此模块,如果不装,安装nginx过程中,也会报错。
    
    [root@web01 /server/tools]# yum -y install openssl openssl-devel
    

    (3)编译安装步骤

    [root@web01 /server/tools]# tar xf nginx-1.18.0.tar.gz
    [root@web01 /server/tools]# cd nginx-1.18.0
    [root@web01 /server/tools/nginx-1.18.0]# useradd -s /sbin/nologin www -M #创建nginx进程使用的用户(也就是nginx启动的时候,内部是由该用户启动的)
    [root@web01 /server/tools/nginx-1.18.0]# id www
    [root@web01 /server/tools/nginx-1.18.0]# rpm -qa gcc*  #需要安装gcc编译器,,没装的一定要装
    gcc-c++-4.8.5-36.el7.x86_64
    gcc-gfortran-4.8.5-36.el7.x86_64
    gcc-4.8.5-36.el7.x86_64
    [root@web01 /server/tools/nginx-1.18.0]# ./configure  --user=www --group=www --prefix=/application/nginx-1.18.0/ --with-http_stub_status_module  --with-http_ssl_module --with-pcre  #配置
    #configure参数的作用
    --prefix=PATH  路径
    --user=USER    用户
    --group=GROUP  组
    --with-pcre    伪静态
    --with-http_stub_status_module 状态
    --with-http_ssl_module      加密 443
    
    [root@web01 /server/tools/nginx-1.18.0]# make #编译,把源码编译成二进制
    [root@web01 /server/tools/nginx-1.18.0]# make install  #编译安装
    [root@web01 /server/tools/nginx-1.18.0]# ln -s /application/nginx-1.18.0/ /application/nginx  #生成软连接
    [root@web01 /server/tools/nginx-1.18.0]# /application/nginx/sbin/nginx   #启动
    [root@web01 /server/tools/nginx-1.18.0]# netstat -lntup|grep nginx  #查看启动情况
    [root@web01 /server/tools/nginx-1.18.0]# curl -i localhost  #查看返回状态码是否为200
    

    9. Nginx目录结构说明

    [root@web02 /application/nginx]# tree
    .
    ├── conf
    │   ├── fastcgi.conf         #和动态服务的接口配置参数,配合php
    │   ├── fastcgi.conf.default
    │   ├── fastcgi_params 
    │   ├── fastcgi_params.default
    │   ├── koi-utf
    │   ├── koi-win
    │   ├── mime.types            #媒体类型
    │   ├── mime.types.default
    │   ├── nginx.conf            #主配置文件
    │   ├── nginx.conf.default
    │   ├── scgi_params
    │   ├── scgi_params.default   #和动态服务的接口配置参数
    │   ├── uwsgi_params
    │   ├── uwsgi_params.default  #和动态服务的接口配置参数,配合Python
    │   └── win-utf
    ├── fastcgi_temp
    ├── html            #默认站点目录。  
    │   ├── 50x.html
    │   └── index.html  #默认的首页,10.0.0.8不指定文件,默认加载index.html首页。
    ├── logs
    │   ├── access.log  #访问日志
    │   ├── error.log   #Nginx错误日志。
    │   └── nginx.pid   #进程号对应文件。
    ├── sbin
    │   └── nginx       #启动命令。
    

    10. Nginx启动疑难杂症汇总

    10.1 启动Nginx报错:nginx: [emerg] getpwnam("nginx") failed。

    这是因为没有对应的Nginx服务用户导致的,创建一个用户即可。
    

    10.2 如何查看Nginx编译时的参数?

    [root@web01 /server/tools/nginx-1.18.0]# /application/nginx/sbin/nginx -V
    nginx version: nginx/1.18.0
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
    built with OpenSSL 1.0.2k-fips  26 Jan 2017
    TLS SNI support enabled
    configure arguments: --user=www --group=www --prefix=/application/nginx-1.18.0/ --with-http_stub_status_module --with-http_ssl_module --with-pcre
    

    10.3 浏览器、wget或者curl等软件访问不了Nginx页面。

    此类问题的排查思路分为nginx服务端和客户端排查,服务端排查过程如下:

    (1)首先关闭selinux
    [root@web01 ~]# setenforce 0
    [root@web01 ~]# vim /etc/selinux/config  #把SELINUX=enforcing改成SELINUX=disabled
    [root@web01 ~]# grep SELINUX=disabled /etc/selinux/config 
    
    (2)然后检查防火墙,如下:
    [root@web01 ~]# systemctl status firewalld
    ● firewalld.service - firewalld - dynamic firewall daemon
       Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
       Active: inactive (dead)  #表示没有开启
         Docs: man:firewalld(1)
    
    (3)检查端口和进程
    [root@web01 ~]# netstat -lntup|grep 80
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      9458/nginx: master  
    [root@web01 ~]# ps -ef | grep [n]ginx
    root       9458      1  0 20:37 ?        00:00:00 nginx: master process /application/nginx/sbin/nginx
    www        9459   9458  0 20:37 ?        00:00:00 nginx: worker process
    
    (4)在服务器本地wget http://192.168.1.51测试(如果前两步灭有通过,这步就不用进行了)
    [root@web01 ~]# wget http://192.168.1.51
    --2020-05-19 21:04:13--  http://192.168.1.51/
    Connecting to 192.168.1.51:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 612 [text/html]
    Saving to: ‘index.html.1’
    
    100%[==================================================================================================================================================>] 612         --.-K/s   in 0s      
    
    2020-05-19 21:04:13 (70.4 MB/s) - ‘index.html.1’ saved [612/612]
    
    (5)查看nginx错误日志
    [root@web01 ~]# cat /application/nginx/logs/error.log
    

    客户端排查过程

    (1)在客户端上telnet服务器端IP、端口
    C:UsersAdministrator>ping 192.168.1.51
    正在 Ping 192.168.1.51 具有 32 字节的数据:
    来自 192.168.1.51 的回复: 字节=32 时间<1ms TTL=64
    来自 192.168.1.51 的回复: 字节=32 时间<1ms TTL=64  #通了,就可以排除物理链路问题
    
    (2)在客户端telnet服务端I、端口等
    [root@web01 ~]# telnet 192.168.1.51 80
    Trying 192.168.1.51...
    Connected to 192.168.1.51.
    Escape character is '^]'.  #这就表示端口开放了
    
    (3)在客户端使用wget或curl命令检测
    [root@web01 ~]# curl -I 192.168.1.51
    HTTP/1.1 200 OK
    Server: nginx/1.18.0
    Date: Tue, 19 May 2020 13:16:16 GMT
    Content-Type: text/html
    Content-Length: 612
    Last-Modified: Tue, 19 May 2020 12:36:58 GMT
    Connection: keep-alive
    ETag: "5ec3d2ea-264"
    Accept-Ranges: bytes
    

    10.4 部署一个web站点

    [root@web01 /application/nginx/html]# cat index.html
    <html>
    <head>
    <title>老男孩58期</title>
     <meta charset="UTF-8">
    </head>
    <body bgcolor=green>
    <br>
    <div align=center>
    <table border=1>
    <tr>
    	<td>ID</td>
    	<td>NAME</td>
    </tr>
    
    <tr>
    	<td>001</td>
    	<td>项博</td>
    </tr>
    <tr>
    	<td>002</td>
    	<td>项伯</td>
    </tr>
    </table>
    </div>
    </body>
    </html>
    

    浏览器访问
    image.png

  • 相关阅读:
    ASP.NET 动态创建文本框 TextBox (add TextBox to page dynamically)
    SQL Server 行列转换
    NPOI把Excel导入到数据库
    Net操作Excel(终极方法NPOI)
    mongdo通用类(C#版)
    ORACLE 定时执行存储过程
    C# Excel导入、导出
    网络爬虫+HtmlAgilityPack+windows服务从博客园爬取20万博文
    Git初级使用教程
    asp.net+swfupload 多图片批量上传(附源码下载)
  • 原文地址:https://www.cnblogs.com/xiets/p/12919749.html
Copyright © 2020-2023  润新知