Nginx介绍
Nginx是一个很强大的高性能Web和反向代理服务,也是一种轻量级的Web服务器,可以作为独立的服务器部署网站,应用非常广泛,特别是现在前后端分离的情况下。而在开发过程中,我们常常需要在window系统下使用Nginx作为Web服务器。
Window10 下载安装Nginx
下载Nginx
Nginx官网: 点击查看
去Nginx官网下载:
访问Nginx官网,找到download
选择Nginx版本:
在下载界面选择自己需要的Nginx版本,找到对应版本,下载即可
解压Nginx:
下载到本地,直接解压即可
Nginx的启动
Nginx基本目录:
conf:存在Nginx配置文件的目录
docs:存放Nginx文档的目录
html:存放静态html文件的目录
logs:存放Nginx日志的目录
temp:存放临时文件的目录
查看80端口是否被占用:
- 打开命令窗口(以管理员身份运行)
- 查询所有运行的端口
netstat -ano
3.查询某个端口运行的进程号
netstat -aon|findstr 80
例如 80 端口目前进程号为: 10668
4. 根据进程号查看被哪个应用占用
tasklist|findstr 10668
5.结束占用的进程号
taskkill -PID 51248 -F
这样80端口就不再被占用了
Nginx默认80端口,因此也可以直接修改Nginx的默认端口,方法如下:
- Nginx的配置文件是在conf目录下的nginx.conf文件
2.修改Nginx端口号
启动Nginx:
在Nginx安装目录的绝对路径的框框内输入 cmd
直接输入 nginx
或者 start nginx
,然后回车,就可以启动Nginx了
然后在浏览器地址栏输入 localhost:80
,然后再回车(80端口号可以省略,就算输入了也不显示)
关闭nginx的命令:nginx -s stop
Nginx的配置文件
打开配置文件
- 打开命令窗口(终端),可以通过命令
nginx -V
来查找Nginx配置文件所在路径。
如上图, --conf-path=
后面就是配置文件所在路径
- 进入对应目录
- 用vscode 打开配置文件
nginx.conf
配置文件相关
worker
在Nginx中,有一个主进程(master)
,其用于来检测配置文件和管理worker进程,而worker进程
就是工作进程,用来处理来自客户端的各种请求
在配置文件中,worker_processes
用来管理worker进程数量,如上图所示,默认工作进程为1
events 块
events 块
主要用于管理服务器与客户端之间的网络连接的配置
worker_connections
用来配置每个worker
的最大连接数,如上图所示,最大连接数为1024
http块
http块
是整个配置文件中修改最频繁的部分
下图为http块
的结构:
如上图所示, http块
引入了另一个配置文件 mime.types
,该文件可以使Nginx可以通过文件后缀名来判断文件的类型,并作出对应的处理,文件内容如下图所示:
图中 后缀名为css
的会被Nginx当成文本文件(text) 来处理,后缀名为jpg
的会被当成二进制文件(image) 处理,其余的按照文件依次类推。
文件中同一行的第一个是Nginx
对该文件的分类,如text/html
就是指文本文件类型下html
,第二个是该文件的后缀名
server 块
server块
就是虚拟主机块,里面对应着虚拟主机的配置,可以配置多台虚拟主机(如下图)
listen 80;
表明该服务器监听80端口(可自定义)
,即通过80端口与客户端通信
server_name localhost;
表明该服务器域名是localhost(http://localhost
)
location /{}
表明当访问到根路径/ 时(http ://localhost/
),就会弹出的网页,块里面是网页所在位置, 路径是Nginx安装所在位置的html文件夹下,该文件下的index.html
https配置
如上图所示,https协议就是http协议的安全版本,使用https协议要用到ssl证书(其可以生成密钥文件和证书文件
),在腾讯云和阿里云上都可以申请到免费的ssl证书。
将密钥文件和证书文件都放在服务器上,然后如上图所示,打开配置文件做修改,在监听端口号后面加上ssl
, 输入证书文件和密钥文件在服务器上存储的地址,后面的配置如上图所示即可
http重定向
将某个配置了域名的http请求重定向到https版本站点:
server {
listen 80;
server_name 662p.com www.662p.com;
return 301 https://662p.com$request_uri;
}
//让我们逐行了解上面的代码。
Listen 80;
//使用端口80,服务器将侦听指定域名的所有传入连接。
Server_name 662p.com www.662p.com
//指定域名。因此,将其替换为要重定向的网站域名。
Return 301 https://662p.com$request_uri
//将请求移至该站点的HTTPS版本。
将所有http请求重定向到https版本站点:
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
解释说明:由于 default_server
的存在,那些未配置的 HTTP
域名也将匹配该 server {}
块,然后 return 301
将重定向到对应的 HTTPS 站点
正向代理与反向代理
正向代理是一个位于客户端和目标服务器之间的代理客户端(中间客户端
)。为了从目标服务器取得内容,客户端向代理客户端发送一个请求,并且指定目标服务器,之后代理向目标服务器转发请求,将获得的内容返回给客户端(如通过VPN科学上网,此时VPN就是正向代理
)
反向代理是指以代理服务器
来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器
反向代理好处:客户端只能访问指定的域名(可自定义),从而避免了服务器的真实ip地址和端口号泄露,保证了数据安全
Nginx配置反向代理
如上图所示,在http块
中配置反向代理:upstream backend{}
,其中backend
是自定义的反向代理块的名字,该块里面是其他三个服务器 server ip地址:端口号
配置完反向代理块后,在server块
中 配置location /app{}
,其中app
是自定义的域名,即那个客户端可以访问到的域名,该块里面,proxy_pass
后面跟的是反向代理块(http://反向代理块的名字
)
如上图所示,就可以访问到对应的反向代理块内的服务器了,当其中同时有多个服务器时,采用轮询的方式来依次访问。
为了防止所有客户端都挤在一个服务器进行访问,使其他服务器空闲,因此我们在部署服务器时要考虑到负载均衡
负载均衡策略
权重法
如上图所示,可以在服务器后面增加权重,因而增大服务器被访问到的几率
ip哈希法
如上图所示, 添加语句 ip_hash;
,这样每个客户端IP地址都会进行hash处理,再根据结果来决定访问哪一个服务器,保证同一个客户端只能访问同一个服务器
虚拟主机
在Nginx
中一个server块
就是一个虚拟主机,当我们访问不同域名时,Nginx
会根据域名来启用对应的主机配置,因此我们可以在一台服务器上部署多个虚拟主机,即部署多个网站