目录
1.前言
2.安装
3.配置文件详解
4.工做原理
5.Linux下托管.NET Core项目
6.Linux下.NET Core项目负载均衡
7.Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)
8.Linux下.NET Core项目Nginx+Keepalived高可用(双主模式)
9.Linux下.NET Core项目LVS+Keepalived+Nginx高可用集群
10.构建静态服务器
11.日志分析
12.优化策略
13.总结
Nginx分为Linux版和Windows版,相比于Windows,Nginx在Linux性能比较好,并且.NET Core跨平台,可在Linux下运行。因此这里主要介绍了Linux版如何安装,包括指令安装以及官网下载安装。html
Nginx官网下载地址:http://nginx.org/en/download.htmlpython
首先咱们在Linux建立Nginx目录,选择官网下载地址下载到此目录,而后解压,删除下载文件linux
#下载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
#由于安装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
接下来咱们就要编译安装Nginxc++
#进入刚刚解压的文件夹 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下,是否是以为比较麻烦?那有没有别的办法能够任意目录执行命令呢?请看下面的方法:vim
①、在这里咱们能够设置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
#安装epel sudo yum -y install epel-release #安装Nginx sudo yum -y install nginx #启动Nginx,它不会本身启动 sudo systemctl start nginx
#在 /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
#Nginx默认是不主动开启的,为了可以在系统启动就开启Nginx
sudo systemctl enable nginx
#Nginx中止主动开启
sudo systemctl disable nginx
#开放端口 sudo firewall-cmd --zone=public --add-port=80/tcp --permanent #重启防火墙 sudo firewall-cmd --reload
安全加强型 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的白名单
yum -y install policycoreutils-python cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx semodule -i mynginx.pp
①、快速中止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