▒ 目录 ▒
- 🛫 导读
- 需求
- 1️⃣ 安装
- brew替换为阿里源
- 修复报错`No such file or directory`
- brew install nginx
- 常用文件及目录
- 常用命令
- 2️⃣ nginx配置
- 配置结构
- 3️⃣ web服务器
- 默认服务器
- 自定义静态服务器
- 4️⃣ 反向代理
- 配置及介绍
- 5️⃣ 负载均衡
- 配置及介绍
- 负载均衡的策略
- 📖 参考资料
🛫 导读
需求
最近写了一个前端应用,需要部署后,让别人能访问,想来想去,还是选择了目前最强悍的nginx。
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
1️⃣ 安装
brew替换为阿里源
默认连接的外网,很慢,经常安装失败。
# 查看 brew.git 当前源
$ cd "$(brew --repo)" && git remote -v
origin https://github.com/Homebrew/brew.git (fetch)
origin https://github.com/Homebrew/brew.git (push)
# 查看 homebrew-core.git 当前源
$ cd "$(brew --repo homebrew/core)" && git remote -v
origin https://github.com/Homebrew/homebrew-core.git (fetch)
origin https://github.com/Homebrew/homebrew-core.git (push)
# 修改 brew.git 为阿里源
$ git -C "$(brew --repo)" remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git
# 修改 homebrew-core.git 为阿里源
$ git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git
# zsh 替换 brew bintray 镜像
$ echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.zshrc
$ source ~/.zshrc
# bash 替换 brew bintray 镜像
$ echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.bash_profile
$ source ~/.bash_profile
# 刷新源
$ brew update
修复报错No such file or directory
设置好源后,执行安装命令
brew install nginx
,小编的电脑报如下错误:
网上有说权限问题,让修改权限,不过依然无法安装。
后来想了想,是不是这个文件有问题,删了,果然能安装了。
brew install nginx
安装过程会打印一些基本信息,如下(内容很长,截取开头的一部分):
常用文件及目录
安装后,nginx被安装到不同的目录(结构类似Linux),如下:
描述 | 路径 |
---|---|
可执行文件路径 | /usr/local/bin/nginx |
配置文件 | /usr/local/etc/nginx/nginx.conf |
默认网页路径 | /usr/local/var/www |
常用命令
brew
常用命令
- brew搜索软件命令: brew search nginx
- brew安装软件命令: brew install nginx
- brew卸载软件命令: brew uninstall nginx
- brew升级命令: sudo brew update
- 查看安装信息(比如查看安装目录等) sudo brew info nginx
- 查看已经安装的软件:brew list
nginx
常用命令
启动命令: nginx
快速停止命令 nginx -s stop
平稳退出命令:nginx -s quit
重新加载配置文件命令:nginx -s reload
检查配置文件正确性:nginx -t
查询nginx主进程号:ps -ef | grep nginx
- 正常停止:kill -QUIT 主进程号
- 快速停止:kill -TERM 主进程号 / kill -INT 主进程号
- 强制停止:kill -9 主进程号
2️⃣ nginx配置
配置结构
如上述配置文件所示,主要由6个部分组成:
- main:用于进行nginx全局信息的配置
- events:用于nginx工作模式的配置
- http:用于进行http协议信息的一些配置
- server:用于进行服务器访问信息的配置
- location:用于进行访问路由的配置
- upstream:用于进行负载均衡的配置
main # 全局配置
events { # nginx工作模式配置
}
http { # http设置
....
server { # 服务器主机配置
....
location { # 路由配置
....
}
location path {
....
}
location otherpath {
....
}
}
server {
....
location {
....
}
}
upstream name { # 负载均衡配置
....
}
}
具体参数,可参考文章《Nginx安装及配置详解包括windows环境》
https://blog.csdn.net/brian_keepwalking/article/details/107375603
3️⃣ web服务器
默认服务器
nginx安装好后,默认就有一个server(通过配置
/usr/local/etc/nginx/nginx.conf
实现的),该配置及介绍如下。
server {
# 端口8080
listen 8080;
# 用于指定ip地址或者域名,多个配置之间用空格分隔
server_name localhost;
# 表示匹配访问根目录
location / {
# 用于指定访问根目录时,访问虚拟主机的web目录
root html;
# 在不指定访问具体资源时,默认展示的资源文件列表
index index.html index.htm;
}
#error_page 404 /404.html;
# 错误访问的地址
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
访问http://localhost:8080/, 最终效果:
自定义静态服务器
自己编译个静态网页,设置端口、路径如下:
server {
listen 8088;
server_name localhost;
location / {
root /Users/khz/_ALL/STUDY/CODE/GIT/gitee/constellations/taurus-x/pig-ui/dist/dist;
index index.html index.htm;
}
}
访问http://localhost:8088/, 最终效果:
4️⃣ 反向代理
说反向代理之前,我们先看看
正向代理
,正向代理也是大家最常接触的到的代理模式。常见应用有游戏加速器等。
正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。
反向代理
,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息!
多个客户端给服务器发送的请求,nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,nginx扮演的就是一个反向代理角色
配置及介绍
在上文中,《自定义静态服务器》章节,我们配置了8088的页面。但是实际应用中,为了方便访问,我们需要配置的往往是80端口,下面的配置就是通过nginx配置反向代理实现该功能的例子。
访问http://localhost
时,直接跳转到http://localhost:8088
。
server {
listen 80;
# server_name 192.168.17.129;
server_name localhost;
location / {
root html;
index index.html index.htm;
// 代理到8088端口
proxy_pass http://127.0.0.1:8088;
}
}
5️⃣ 负载均衡
随着互联网信息的爆炸性增长,负载均衡(load balance)已经不再是一个陌生的话题,负载均衡是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验,快速增长的访问量和数据流量催生了各式各样的负载均衡的产品,很多专业的的负载均衡硬件提供了很好的功能,但价格不菲,这使得负载均衡软件大受欢迎,nginx就是其中一个,在linux下有nginx、lvs、haproxy等服务,可以提供复杂均衡服务。
配置及介绍
下面示例为,根据weight将请求转发到myserver列表中。
# 定义服务列表
upstream myserver{
server 127.0.0.1:8081 weight=5;
server 127.0.0.1:8082 weight=10;
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
// 代理到 myserver 列表
proxy_pass http://myserver;
}
}
负载均衡的策略
- 轮询(默认) ;
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
upstream myserver{
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
- weight ;
weight 代表权重默认为 1,权重越高被分配的客户端越多。指定轮询几率,weight权重大小和访问比率成正比。用于后端服务器性能不均衡的情况。
upstream myserver{
server 127.0.0.1:8081 weight=5;
server 127.0.0.1:8082 weight=15;
}
- ip_hash;
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器。
好处:使用nginx+ip_hash这种策略代理,很好解决了同一用户访问同一个应用,session不共享的问题,实现session共享的问题。
upstream myserver{
ip_hash;
server 127.0.0.1:8081 weight=5;
server 127.0.0.1:8082 weight=15;
}
- fair ;
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream myserver{
fair;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
- url_hash;
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream myserver{
hash $request_uri;
hash_method crc32;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
📖 参考资料
- 【狂神说】Nginx最新教程通俗易懂,40分钟搞定! https://www.bilibili.com/video/BV1F5411J7vK
- Nginx安装及配置详解包括windows环境
https://blog.csdn.net/brian_keepwalking/article/details/107375603 - 【广告太多,但是有点东西】高性能 HTTP、反向代理 Web 服务器 Ngnix 最通俗解读 https://www.bilibili.com/video/BV1Rt4y1A72B