ngix在很多大型网站都有使用到,如网易:
image.png
ngix下载安装及开启服务
下载地址
方式一:直接在官网下载
官网下载地址
缺点:
官网上下载的ngix为原生的,没有集成很多插件,使用起来没那么方便,推荐使用第三方插件
方式二:第三方插件,在此以OpenResty插件为例
OpenResty是一个全功能的 Web 应用服务器。它打包了标准的 Nginx 核心,常用的第三方模块以及大多数依赖项。 可以把它看成是Nginx附加众多的第三方插件的合集。其主体是嵌入lua脚本的支持,让你能够使用lua灵活地处理运算逻辑。
下载安装及使用步骤
具体下载安装及开启服务步骤如下:
-
去openresty官网下载,根据系统选择需要的下载包进行下载
openresty下载地址 -
下载完成后解压到想要安装软件的位置,插件解压后文件夹结构如下:
image.png -
在解压包的路径下使用cmd打开,输入
image.pngnginx.exe
命令,开启ngix服务
-
打开浏览器,输入
image.png127.0.0.1
或者localhost
, 就能看到Welcome to OpenResty!
的字样,证明ngix服务已经开启了
ngix 配置
-
通过记事本打开配置文件:安装包文件夹下的
image.pngconf
文件夹下的nginx.conf
-
nginx.conf
初始化
a. 删除nginx.conf
多余注释
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
b. 分析配置项
通过配置项server
可以看到,当我们通过loacalhost:80
直接访问时(因为http默认端口就是80,在此可以省略),默认路径就是/
路径,就会打开html
这个目录下的index.html
文件
在此,可以通过双击直接打开该文件
index.html
来验证我的说法,通过直接打开文件和输入loacalhost
打开页面一致文件打开
c.删除多页配置内容
配置项server
还配置了如果发生报错显示50x.html
,可以把这里的配置删掉。因此初始化后的nginx.conf
就变成如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
}
location 匹配顺序
在说location之前,我一定要先分享一个echo 的大坑,希望小伙伴们不要踩坑。我是在 windows 环境中进行开发,在调试配置的过程中,本希望可以通过 echo 命令打印一些日志辅助分析。因此花了一两个小时在百度上搜索echo-nginx-module安装使用教程,结果搜到的全是Linux教程,最后找到其根本原因: windows 环境无法使用echo-nginx-module原因
Windows代码不是开源的,Nginx无法动态链接模块,因此,您仅限于nginx.org上提供的二进制文件以及它们包含的模块。
匹配模式:
location = /uri = 表示精确匹配,只有完全匹配上才能生效。匹配优先级最高
location ^~ /uri ^~ 对URL路径进行前缀匹配,并且在正则之前。匹配优先级次高
location ~ pattern ~ 表示正则匹配,优先级较高。
location / / 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default,优先级最低。
匹配规则:
(1)匹配优先级越高,越优先匹配
(2)同一优先级,匹配程度越高的匹配
(3)匹配优先级和匹配程度都一样,则匹配在前面的路径
location配置举例:
location / {
echo '通用匹配,优先级最低';
}
location = /a {
echo '精确匹配,优先级最高';
}
location ^~ /a {
echo '开头匹配,以/a开头,优先级次高';
}
location ^~ /a/b {
echo '开头匹配,以/a/b开头,优先级次高';
}
location ~ ^/\w {
echo '正则匹配,以数字、字母、下划线开头,优先级较高';
}
location ~ ^/\d {
echo '正则匹配,以数字开头,优先级较高';
}
在浏览器输入不同的地址l及对应结果:
http://localhost/a --> 精确匹配,优先级最高
http://localhost/a/b --> 开头匹配,以/a/b开头,优先级次高
http://localhost/b --> 正则匹配,以数字、字母、下划线开头,优先级较高
http://localhost/12 --> 正则匹配,以数字开头,优先级较高
http://localhost/d --> 正则匹配,以数字、字母、下划线开头,优先级较高
nginx 反向代理配置
对于前面写的规则,可能小伙伴们会有点晕,没关系,不用背下来,使用的时候对照一下就好了。下面开始进入正题,nginx 反向代理配置。
现在我的本地开启了一个服务,地址为http://192.168.37.1:3800/
1. 开启本地服务:
2. 设置Nginx反向代理本地服务及百度
location /hello {
proxy_pass http://192.168.37.1:3800/;
}
location /baidu {
proxy_pass https://www.baidu.com/;
}
3. 代理结果
注意location路径设置,容易踩坑
location /a {
proxy_pass http://ip;
}
导致: /a/x --> http://ip/a/x
location /b {
proxy_pass http://192.168.0.12:3801/;
}
导致: /b/x --> http://ip/x
负载均衡
NGINX配置负载均衡主要是在nginx.conf
文件中里upstream
模块
1、upstream模块应放于nginx.conf配置的http{}标签内
2、upstream模块默认算法是wrr (权重轮询 weighted round-robin)
Nginx的upstream支持5种分配方式,包括轮询、weight(权重比)、ip_hash、fair 、url_hash,其中前三种为Nginx原生支持的分配方式,后两种为第三方支持的分配方式。在此只对轮询、weight(权重比)做介绍。
轮询
轮询是upstream的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器down掉后,能自动剔除。
upstream group {
server 192.168.0.12:3800;
server 192.168.0.12:3801;
}
weight(权重比)
&emsp轮询的加强版,即可以指定轮询比率,weight和访问几率成正比,主要应用于后端服务器异质的场景下
upstream group {
server 192.168.0.12:3800 weight=1;
server 192.168.0.12:3801 weight=10;
}
nginx.conf
文件完整配置如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream group {
server 192.168.0.12:3800 weight=1;
server 192.168.0.12:3801 weight=10;
}
server {
listen 80;
server_name localhost;
default_type text/html;
location /a {
proxy_pass http://group/;
}
}
}
以上都是我工作中常用到的项目优化方法,文中有不足或者读者有疑问或更好的见解,欢迎留言讨论。
如果觉得该篇文章对您有帮助,别忘了留下您的足迹,点个赞❤噢
网友评论