目录

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..tar.gz #删除下载文件
sudo rm -f nginx-1.16..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. #为编译做准备,如果报错,缺少文件,请删除,重新下载Nginx
sudo ./configure --prefix=/usr/local/nginx #编译
sudo make #安装
sudo make install #回到~目录,然后删除解压缩的文件
cd
sudo rm -rf nginx-1.16.

已经安装完毕啦,下面我们在试试启动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=/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 - 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

Nginx知多少系列之(二)安装的更多相关文章

  1. Nginx知多少系列之(六)Linux下.NET Core项目负载均衡

    目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略详解 8.Linux下.NET C ...

  2. Nginx知多少系列之(十四)Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)

    目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...

  3. Nginx知多少系列之(七)负载均衡策略

    目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...

  4. Open vSwitch系列之二 安装指定版本ovs

    在ovs学习过程中,如果自己想要安装一个ovs交换机其实一条简单的命令 apt  install openvswitch 就可以了,但是这种方法只能安装低版本的ovs.在特殊情况下需要安装指定版本,例 ...

  5. Nginx知多少系列之(五)Linux下托管.NET Core项目

    目录 1.前言 2.安装 3.配置文件详解 4.Linux下托管.NET Core项目 5.Linux下.NET Core项目负载均衡 6.Linux下.NET Core项目Nginx+Keepali ...

  6. Nginx知多少系列之(一)前言

    目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.Linux下.NET Core项目Nginx+ ...

  7. 转 --maven系列之二 安装与配置

    http://blog.csdn.net/jiuqiyuliang/article/details/45390313 [项目管理和构建]——Maven下载.安装和配置(二) 标签: 工具开发maven ...

  8. Kettle系列文章二(安装配置Kettle+SqlServer+简单的输入输出作业)

    一.下载 Kettle下载地址:https://community.hitachivantara.com/docs/DOC-1009855 下拉到DownLoad,点击红框中的链接进行下载.. 二.解 ...

  9. Nginx知多少系列之(三)配置文件详解

    目录 1.前言 2.安装 3.配置文件详解 4.Linux下托管.NET Core项目 5.Linux下.NET Core项目负载均衡 6.Linux下.NET Core项目Nginx+Keepali ...

随机推荐

  1. frida的简单实用

    一.环境 1.环境 1.手机运行服务端 2. 电脑端运行客户端3.进行端口转发 adb forward tcp:27042 tcp:27042 adb forward tcp:27043 tcp:27 ...

  2. 手把手构建LSTM的向前传播(Building a LSTM step by step)

      本篇是在之前两篇基础上接着写的: 吴恩达deepLearning.ai循环神经网络RNN学习笔记(理论篇) 从头构建循环神经网络RNN的向前传播(rnn in pure python) 也可以不看 ...

  3. Java多线程并发06——CAS与AQS

    在进行更近一步的了解Java锁的知识之前,我们需要先了解与锁有关的两个概念 CAS 与 AQS.关注我的公众号「Java面典」了解更多 Java 相关知识点. CAS(Compare And Swap ...

  4. Collection-接口中的方法(新手)

    /* Collection 接口中的方法 ArrayList implements List 数组列表 实现 列表 List extends Collection 列表 继承 数组列表*///导入包. ...

  5. Mybatis(一)Mybatis相关概念

    1.1 传统的JDBC实现 public static void main(String[] args) { Connection connetion = null; PreparedStatemen ...

  6. Linux 部署Tomcat图文注解 一学就会

    导读 安装tomcat前首先要安装对应的jdk并配置Java环境. 安装jdk,请参考:点我直达 安装Tomcat 下载Tomcat包 官网地址:点我直达 Tomcat与jdk兼容关系 注:Tomca ...

  7. Swift 4.0 中的错误处理及抛出错误

    在Swift的标准库,很多方法名后都带有'throws'这个关键词, 'throws'表示该方法在执行过程中遇到错误则抛出,但不会crash. 下面是Swift标准库中的一个构造方法,String.D ...

  8. SQL语句中,如何使用含有if....else...判断语句

    在我们开发中,有时要对数据库中的数据按照条件进行查询,用到if else类似的语句进行判断,那么if else语句只有在存储过程,触发器之类的才有,但是要在sql上当满足某种条件上要取不同的字段值,刚 ...

  9. go micro实战01:快速搭建服务

    背景 go-micro给我们提供了一个非常便捷的方式来快速搭建微服务,而且并不需要提前系统了解micro,下面用一个简单的示例来快速实现一个服务. 创建Proto文件 因为我们要做微服务,那么就一定有 ...

  10. Django模板层学习笔记

    一. 前言 Django模板层的知识包括标签.过滤器.自定义标签.自定义过滤器以及inclusion_tag,最重要的是模板的继承和导入. 首先模板层最重要的是模板语法,之前我们提过涉及到变量用模板语 ...