【nginx】全面实战-Mac

🛫 导读

需求

最近写了一个前端应用需要部署后让别人能访问想来想去还是选择了目前最强悍的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常用命令

  1. brew搜索软件命令 brew search nginx
  2. brew安装软件命令 brew install nginx
  3. brew卸载软件命令: brew uninstall nginx
  4. brew升级命令 sudo brew update
  5. 查看安装信息(比如查看安装目录等) sudo brew info nginx
  6. 查看已经安装的软件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;
	}
}

负载均衡的策略

  1. 轮询默认
    每个请求按时间顺序逐一分配到不同的后端服务器如果后端服务器 down 掉能自动剔除。
upstream myserver{
  server 127.0.0.1:8081;
  server 127.0.0.1:8082;
}
  1. weight
    weight 代表权重默认为 1,权重越高被分配的客户端越多。指定轮询几率weight权重大小和访问比率成正比。用于后端服务器性能不均衡的情况。
upstream myserver{
  server 127.0.0.1:8081 weight=5;
  server 127.0.0.1:8082 weight=15;
}
  1. 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;
}
  1. fair
    按后端服务器的响应时间来分配请求响应时间短的优先分配。
upstream myserver{
  fair;
  server 127.0.0.1:8081;
  server 127.0.0.1:8082;
}
  1. 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;
}

📖 参考资料

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: nginx