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
  • 相关阅读:
    UNP(2rd)第二卷源码编译
    A very hard mathematic problem
    并查集~
    N皇后问题 深搜dfs
    实践中的一点小问题
    java环境配置 HelloWorld
    精确时间计算方法
    C语言关于文件操作
    字典树应用~
    并查集应用2
  • 原文地址:https://www.cnblogs.com/jayjiang/p/12632942.html
Copyright © 2011-2022 走看看