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..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知多少系列之(二)安装的更多相关文章
- Nginx知多少系列之(六)Linux下.NET Core项目负载均衡
目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略详解 8.Linux下.NET C ...
- Nginx知多少系列之(十四)Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)
目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...
- Nginx知多少系列之(七)负载均衡策略
目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...
- Open vSwitch系列之二 安装指定版本ovs
在ovs学习过程中,如果自己想要安装一个ovs交换机其实一条简单的命令 apt install openvswitch 就可以了,但是这种方法只能安装低版本的ovs.在特殊情况下需要安装指定版本,例 ...
- Nginx知多少系列之(五)Linux下托管.NET Core项目
目录 1.前言 2.安装 3.配置文件详解 4.Linux下托管.NET Core项目 5.Linux下.NET Core项目负载均衡 6.Linux下.NET Core项目Nginx+Keepali ...
- Nginx知多少系列之(一)前言
目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.Linux下.NET Core项目Nginx+ ...
- 转 --maven系列之二 安装与配置
http://blog.csdn.net/jiuqiyuliang/article/details/45390313 [项目管理和构建]——Maven下载.安装和配置(二) 标签: 工具开发maven ...
- Kettle系列文章二(安装配置Kettle+SqlServer+简单的输入输出作业)
一.下载 Kettle下载地址:https://community.hitachivantara.com/docs/DOC-1009855 下拉到DownLoad,点击红框中的链接进行下载.. 二.解 ...
- Nginx知多少系列之(三)配置文件详解
目录 1.前言 2.安装 3.配置文件详解 4.Linux下托管.NET Core项目 5.Linux下.NET Core项目负载均衡 6.Linux下.NET Core项目Nginx+Keepali ...
随机推荐
- Oracle学习笔记--Oracle启动过程归纳整理
Oracle 启动过程分为nomount状态mount状态open状态 每个状态下Oracle都会进行不同的操作:1.nomount状态 在$ORACLE_HOME/dbs目录下寻找参数文件 参数文件 ...
- nsq 初学使用日记
win下更加直观一些,所以不使用liunx 第一步下载 nsq 下载地址 https://github.com/nsqio/nsq.git 使用git clone或者go get 下载下来 第二部 编 ...
- 五分钟学Java:如何才能学好Java Web里这么多的技术
原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 系列文章介绍 本文是<五分钟学Java>系列文章的一篇 本系列文章主要围绕Java程序员必须掌握的核心技能,结合我个人三年 ...
- Kona JDK 在腾讯大数据领域内的实践与发展
导语 | 近日,云+社区技术沙龙“腾讯开源技术”圆满落幕.本次沙龙邀请了多位腾讯技术专家,深度揭秘了腾讯开源项目TencentOS tiny.TubeMQ.Kona JDK.TARS以及Medical ...
- guava限流器RateLimiter原理及源码分析
前言 RateLimiter是基于令牌桶算法实现的一个多线程限流器,它可以将请求均匀的进行处理,当然他并不是一个分布式限流器,只是对单机进行限流.它可以应用在定时拉取接口数据, 预防单机过大流量使用. ...
- SpringMVC框架——文件的上传与下载
使用SpringMVC框架做个小练习,需求: 1.单个图片上传并显示到页面中: 2.多个图片上传并显示到页面中: 3.上传文件后下载文件: 1.pom.xml中添加依赖 <!-- 文件上传 -- ...
- Lua Table pairs输出顺序问题 (版本差异 解决数字索引间断并兼容字符串索引)
问题标签: Lua Table 迭代器;Lua Table 输出顺序; Lua Table 顺序输出;Lua Table 数字索引 字符串索引;Lua Table pairs; 问题背景: 使用pai ...
- Mycat的简介及安装
Mycat简介: 1.1Mycat含义 简单的说,MyCAT就是: 一个彻底开源的,面向企业应用开发的“大数据库集群” 支持事务.ACID.可以替代Mysql的加强版数据库 一个可以视为“Mysql” ...
- node 模块载入原理【1】
简单介绍 我们会从简单的模块载入原理来开始,尝试阅读下 Node.js 源代码.首先我们知道 Node.js 的源代码主要是由 C++ 和 JavaScript 编写的,JS 部分主要在 lib 目录 ...
- Java分布式IP限流和防止恶意IP攻击方案
前言 限流是分布式系统设计中经常提到的概念,在某些要求不严格的场景下,使用Guava RateLimiter就可以满足.但是Guava RateLimiter只能应用于单进程,多进程间协同控制便无能为 ...