zoukankan      html  css  js  c++  java
  • Nginx知多少系列之(二)安装

    目录

    1.前言

    2.安装

    3.配置文件详解

    4.工作原理

    5.Linux下托管.NET Core项目

    6.Linux下.NET Core项目负载均衡

    7.负载均衡策略详解

    8.加权轮询(round robin)策略剖析

    9.IP哈希(ip hash)策略剖析

    10.最少连接(least_conn)策略剖析

    11.随机(random)策略剖析

    12.URL哈希(url hash)策略剖析

    13.响应时间(fair)第三方模块详解

    14.Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)

    15.Linux下.NET Core项目Nginx+Keepalived高可用(双主模式)

    16.Linux下.NET Core项目LVS+Keepalived+Nginx高可用集群

    17.构建静态服务器

    18.日志分析

    19.优化策略

    20.总结

     

    Nginx分为Linux版和Windows版,相比于Windows,Nginx在Linux性能比较好,而且.NET Core跨平台,可在Linux下运行。所以这里主要介绍了Linux版如何安装,包括指令安装以及官网下载安装。

    1.下载地址

    Nginx官网下载地址:http://nginx.org/en/download.html

    2.源码编译安装

    首先我们在Linux创建Nginx目录,选择官网下载地址下载到此目录,然后解压,删除下载文件

      

    #下载Nginx
    sudo wget http://nginx.org/download/nginx-1.16.1.tar.gz
    
    #如果找不到wget,请先安装
    sudo yum -y install wget
    
    #下载完文件在~目录,然后解压
    sudo tar xvf nginx-1.16.1.tar.gz
    
    #删除下载文件
    sudo rm -f nginx-1.16.1.tar.gz

    在安装之前,我们先需要安装Nginx需要的环境,不然会编译准备会不通过

    #因为安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境的话,需要安装gcc。
    sudo yum -y install gcc-c++
    
    #prce(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
    sudo yum install -y pcre pcre-devel
    
    #zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
    sudo yum install -y zlib zlib-devel
    
    #OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
    sudo yum install -y openssl openssl-devel

    接下来我们就要编译安装Nginx

    #进入刚刚解压的文件夹
    cd nginx-1.16.1
    
    #为编译做准备,如果报错,缺少文件,请删除,重新下载Nginx
    sudo ./configure --prefix=/usr/local/nginx
    
    #编译
    sudo make
    
    #安装
    sudo make install
    
    #回到~目录,然后删除解压缩的文件
     cd
    sudo rm
    -rf nginx-1.16.1

    已经安装完毕啦,下面我们在试试启动Nginx吧

    #进入sbin目录
    cd /usr/local/nginx/sbin
    
    #执行启动命令,没有任何报错就说明启动成功
    sudo ./nginx
    
    #查看是否启动成功,查看Nginx进程
    ps aux | grep nginx

     启动成功啦,我们来测试下访问

    每次需要执行nginx命令,都要进入/usr/local/nginx/sbin下,是不是觉得比较麻烦?那有没有别的办法可以任意目录执行命令呢?请看下面的方法:

    ①、在这里我们可以设置ln -s 软链接,这是linux中一个非常重要命令,请大家一定要熟悉。它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件

    #In -s软链接
    sudo ln -s /usr/local/nginx/sbin/* /usr/local/sbin/

    我们试试在~目录只用nginx命令

    这里nginx -t测试配置信息是否正常,显示test failed,Permission denied。说明我们已经找到位置,只是权限的问题。

    权限的问题,我们可以su然后输入密码,进入root,最后在执行nginx -t,但是用root去执行,显得不够安全。

    我们也可以执行下面命令,这样sudo nginx -t就能执行

    sudo ln -s /usr/local/nginx/sbin/* /sbin
    
    sudo ln -s /usr/local/nginx/sbin/* /usr/sbin

    ②、我们也可以把nginx路径 配置到环境变量里面就可以了,这里还是会出现sudo nginx找不到命令,所以还是需要增加In -s软链接

    #编辑profile文件
    sudo vim /etc/profile
    
    #按i进入编辑,在最后面增加下面内容,然后Esc,:wq保存退出
    PATH=$PATH:/usr/local/nginx/sbin
    export PATH
    
    #保存好后,我们要重启配置才能生效
    source /etc/profile
    
    #增加In -s软链接
    sudo ln -s /usr/local/nginx/sbin/* /sbin
    sudo ln -s /usr/local/nginx/sbin/* /usr/sbin

    3.yum安装

    #安装epel
    sudo yum -y install epel-release
    
    #安装Nginx
    sudo yum -y install nginx
    
    #启动Nginx,它不会自己启动
    sudo systemctl start nginx

    #访问站点看看是否成功
    curl http://localhost

    4.配置nginx的systemctl命令

    #在 /usr/lib/systemd/system/目录下面新建一个nginx.service文件。并赋予可执行的权限。
    sudo vim /usr/lib/systemd/system/nginx.service
    
    #按i编辑配置文件
    
    #添加下面的配置文件内容
    
    #按ESC,输入命令保存配置文件
    
    :wq   (保存编辑操作退出)
    :wq!  (保存编辑强制退出)
    [Unit]
    Description=The nginx HTTP and reverse proxy server
    After=network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=forking
    PIDFile=/usr/local/nginx/logs/nginx.pid
    ExecStartPre=/usr/local/nginx/sbin/nginx -t
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/nginx/sbin/nginx -s stop
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target

    下面是带注释的配置文件

    [Unit]                     //对服务的说明
    Description=The nginx HTTP and reverse proxy server     //描述服务
    After=network.target remote-fs.target nss-lookup.target    //描述服务类别
    
    [Service]    //服务的一些具体运行参数的设置
    Type=forking    //后台运行的形式
    PIDFile=/usr/local/nginx/logs/nginx.pid    //PID文件的路径
    ExecStartPre=/usr/local/nginx/sbin/nginx -t    //启动准备
    ExecStart=/usr/local/nginx/sbin/nginx            //启动命令
    ExecReload=/usr/local/nginx/sbin/nginx -s reload   //重启命令
    ExecStop=/usr/local/nginx/sbin/nginx -s stop    //快速停止
    PrivateTmp=true                             //给服务分配临时空间
    
    [Install]
    WantedBy=multi-user.target     //服务用户的模式

    编辑好配置文件之后,我们要重新加载下systemctl命令

    #重新加载systemctl命令
    sudo systemctl daemon-reload

    #开启nginx.service服务
    sudo systemctl start nginx.service

    开启nginx.service服务的时候可能会启动失败,然后我们用前面的命令sudo nginx -s reload,重启Nginx,会报nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory),这个时候我们先要找出Nginx的进程,然后在nginx.pid里面加入master process的进程ID,增加之后,我们在执行sudo nginx -s quit,让Nginx平缓停止,最后我们在开启Nginx.service 服务。

    #查看Nginx的进程
    ps aux | grep nginx
    
    #把Master Process进程的ID写入nginx.pid里面
    sudo vim /usr/local/nginx/logs/nginx.pid
    
    #按i进入编辑模式,Esc退出编辑,:wq退出保存
    
    #平缓停止Nginx
    sudo nginx -s quit
    
    #最后开启nginx.service服务
    sudo systemctl start nginx.service

    下面我们看看都有哪些systemctl命令

    #启动
    systemctl start nginx
    
    #重启
    systemctl reload nginx
    
    #快速停止
    systemctl stop nginx
    
    #查看状态
    systemctl status nginx

    5.开机自启动/停止

    #Nginx默认是不主动开启的,为了能够在系统启动就开启Nginx
    sudo systemctl enable nginx
    
    #Nginx停止主动开启
    sudo systemctl disable nginx

    6.开放80端口

    #开放端口
    sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
    
    #重启防火墙
    sudo firewall-cmd --reload

     

    7.访问的时候502 Bad Gateway,SELinux配置的问题

    安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。
    SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。
    SELinux 的结构及配置非常复杂,而且有大量概念性的东西,要学精难度较大。很多 Linux 系统管理员嫌麻烦都把 SELinux 关闭了。
    如果可以熟练掌握 SELinux 并正确运用,我觉得整个系统基本上可以到达"坚不可摧"的地步了(请永远记住没有绝对的安全)。
    掌握 SELinux 的基本概念以及简单的配置方法是每个 Linux 系统管理员的必修课。

    所以出现这个问题有两种解决方案:

    ①、直接关闭SELinux

    #进入SELinux目录
    cd /etc/selinux
    
    #编辑selinux config配置文件
    sudo vim config
    
    #修改配置:SELINUX=disabled,保存退出

    保存好之后,从enforcing或permissive改为diabled,需要重启系统之后才能生效。当我们重启之后,可以看到访问正常了。

    ②、将Nginx添加至SELinux的白名单

    sudo yum -y install policycoreutils-python  
    sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx  
    sudo semodule -i mynginx.pp 

    8.常用命令

    ①、快速停止Nginx,此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程,不太友好。

    #进入Nginx目录
    cd /usr/local/nginx/sbin
    
    #停止Nginx
    sudo ./nginx -s stop
    
    #如果之前配置了环境,可以直接任意目录执行
    sudo nginx -s stop
    
    #如果配置了systemctl命令
    sudo systemctl stop nginx

    ②、平缓停止,此方式是指允许 nginx 服务将当前正在处理的网络请求处理完成,但不在接收新的请求,之后关闭连接,停止工作。

    #进入Nginx目录
    cd /usr/local/nginx/sbin
    
    #停止Nginx
    sudo ./nginx -s quit
    
    #如果之前配置了环境,可以直接任意目录执行
    sudo nginx -s quit

    ③、强制杀死进程方式停止

    #查看Nginx进程
    ps aux | grep nginx
    
    #杀死相关进程,杀死nginx主进程和工作进程
    sudo kill -9 PID
    
    #进入Nginx目录
    cd /usr/local/nginx/sbin
    
    #启动Nginx
    sudo ./nginx
    
    #如果之前配置了环境,可以直接任意目录执行
    sudo nginx
    
    #如果之前配置了Systemctl命令
    sudo systemctl start nginx

    ④、重启Nginx,通常我们使用nginx修改最多的便是其配置文件 nginx.conf。修改之后想要让配置文件生效而不用重启 nginx,便可以使用此命令。

    #进入Nginx目录
    cd /usr/local/nginx/sbin
    
    #重启Nginx
    sudo ./nginx -s reload
    
    #如果之前配置了环境,可以直接任意目录执行
    sudo nginx -s reload
    
    #如果配置了systemctl命令
    sudo systemctl reload nginx

    ⑤、检测配置文件语法是否正确

    进入nginx目录
    cd /usr/local/nginx/sbin
    
    #指定需要检查的配置文件
    sudo ./nginx -t -c  /usr/local/nginx/conf/nginx.conf
    
    #不加 -c 参数,默认检测nginx.conf 配置文件
    ./nginx -t
    
    #如果之前配置了环境,可以直接任意目录执行
    sudo nginx -t

    ⑥、查看Nginx版本

    #进入Nginx目录
    cd /usr/local/nginx/sbin
    
    #查看状态
    ./nginx -v
    
    #如果之前配置了环境,可以直接任意目录执行
    nginx -v

    ⑦、查看详细版本

    #进入Nginx目录
    cd /usr/local/nginx/sbin
    
    #查看状态
    ./nginx -V
    
    #如果之前配置了环境,可以直接任意目录执行
    nginx -V
  • 相关阅读:
    Working with WordprocessingML documents (Open XML SDK)
    How to Choose the Best Way to Pass Multiple Models in ASP.NET MVC
    Azure:Manage anonymous read access to containers and blobs
    Convert HTML to PDF with New Plugin
    location.replace() keeps the history under control
    On the nightmare that is JSON Dates. Plus, JSON.NET and ASP.NET Web API
    HTTP Modules versus ASP.NET MVC Action Filters
    解读ASP.NET 5 & MVC6系列(6):Middleware详解
    Content Negotiation in ASP.NET Web API
    Action Results in Web API 2
  • 原文地址:https://www.cnblogs.com/jayjiang/p/12632942.html
Copyright © 2011-2022 走看看