Nginx学习
一、Nginx简介
Nginx学习起来并不困难,重点是要多运用才行,不能死记硬背
1.概述
Nginx同Apache一样都是一种WEB服务器,作为一台服务器,其根本目的就是要运行我们写的代码。而Nginx专门为性能优化而开发,所以它的功能有限流、负载均衡、反向代理。性能是其最重要的考量
2.反向代理
正向代理:安装在客户端的代理(VPN)
反向代理:安装在服务器端的代理
3.负载均衡
服务器有多台,每台的性能都不一样,由Nginx觉得将请求发送给哪台服务器
Nginx的请求策略有两种
- 内置策略
- 轮询:依次将请求发送给各个服务器,第一个请求第一台服务器,第二个第二台………
- 加权轮询:服务器性能越高权重越高,优先将请求发送给权重高的服务器
- Ip hash:对请求的ip进行hash操作,使同一个客户端的多个请求分发给同一台服务器处理,因为各个服务器之间的session是不共享的
- 扩展策略
4.动静分离
动指动态文件,静指静态文件
像html、css、jpg这些都是静态文件,不需要经过后台处理,将这些静态文件与动态文件分开部署,以提高资源的相应速度
但是在目前前后端分离的项目中,个人觉得动静分离的作用不大
二、部署Nginx
操作系统为Ubuntu
1.安装
1 |
|
查看是否安装成功
1 |
|
2.启动nginx
1 |
|
提示Job for nginx.service failed because the control process exited with error code. See “systemctl status nginx.service” and “journalctl -xe” for details.
输入命令systemctl status nginx.service
,发现是因为80端口被占用了
我们查看一下nginx的配置文件
1 |
|
在/etc/nginx/nginx.conf中并没有看到80端口,但是可以看到它包含了sites-enabled下的文件,再去查看这个,发现这个文件又指向了 site-available/default
打开default ,可以看到它监听的端口是80,改为81端口,root配置网站根目录,而/var/www/html/就是apache的欢迎页
访问81端口后会指向/var/www/html/
三、Nginx常用命令
1 |
|
四、Nginx配置文件
使用命令
1 |
|
main
:在events
上面的都是全局配置
events
:配置影响 Nginx 服务器与用户的网络连接
http
:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
http
中包含了两个配置文件,该配置文件有对虚拟主机的server
配置
使用命令
1 |
|
server
:配置虚拟主机的相关参数,一个 http
块中可以有多个 server
块
location
:用于配置匹配的 uri
upstream
:配置后端服务器具体地址,负载均衡配置不可或缺的部分;
整个的配置文件结构:
1 |
|
重点是server
upstraem:配置负载均衡,指定服务器的相关信息,这里指定两台后台项目的地址和端口,并在location中配置代理proxy_pass,当访问81端口的/目录时就会将请求发送给 8.8.8.1:8081
注意区分server和server_name,server_name指访问的地址,server指后台服务的地址
访问:server_name:listen/ 代理到:proxy_pass
访问:www.123.com:80/ 会代理到 http://8.8.8.1:8081/
Q:为什么要配置server_name?我们完全可以通过服务器IP:端口进行访问
A:server_name是起的一个标记名称。服务器IP只有一个,可能会出现一台服务器对应多个项目的情况,这样就可以使用server_name实现同一ip不同域名的需求。
当我们通过hosts文件指定IP与域名的对应关系(186.11.124.120(服务器公网IP) www.123.com)之后,对域名的访问会映射成对应的IP,然后server name为虚拟服务器的识别路径。因此不同的域名会转发到对应的应用服务器中去。
类似于git的origin,origin是一个别名,指向一个远程仓库,我们可以在同一个本地仓库中origin1指向github地址,定义origin2指向gitee地址,通过oring1、2向不同的远程仓库进行提交listen:监听的端口
server_name 指定虚拟主机域名,例如:server_name www.123.com
root 指定静态资源目录位置,可以写在
http
、server
、location
配置中location:配置路径
匹配规则 匹配优先级:
=
>^~
>~
>~*
> 不带任何字符=
精确匹配~
正则匹配,区分大小写~*
正则匹配,不区分大小写^~
匹配到即停止搜索
例: location = /image/ location = /image
是否有反斜杠:
Nginx
先找是否有images
目录,如果有则找images
目录下的index.html
没有的话:不带反斜杠会去找是否有
image
文件; 带反斜杠不会去找是否存在
image
文件
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!