【nginx】全面实战-Mac

news2024/11/18 6:02:11

▒ 目录 ▒

    • 🛫 导读
      • 需求
    • 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常用命令

  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;
}

📖 参考资料

  • 【狂神说】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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/174185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

杂记:python和pyinstaller从头安装步骤(附安装包的备份)

pyinstaller 简介 知道的就跳过本章 python 属于脚本语言,只要有 python 就能运行 .py 文件。而 pyinstaller 是可执行文件文件生成工具,约等于编译工具。 以 windows 为例,在 A 计算机上生成的 exe,复制到 B 计算机可以直接运行…

字节跳动青训营--前端day3

文章目录前言一、写好JavaScript的一些原则二、各司其职三、组件封装四、过程抽象前言 仅以此文章记录学习 一、写好JavaScript的一些原则 各司其职:让HTML、CSS和JavaScript职能分离组件封装:好的UI组件具备正确性、扩展性、复用性过程抽象&#xff1…

JVM堆内存分配策略(深入理解Java虚拟机第三章)

堆内存模型: 年轻代: 根据分代算法,默认小于15岁的对象称作年轻代,年轻代分为Eden区、幸存者区(Survivor Form,Survivor To),三者比例为:8:1:1 Eden 分区:对象出生分区…

Java 实现几种 异步的实现方式

前言 异步执行对于开发者来说并不陌生,在实际的开发过程中,很多场景多会使用到异步,相比同步执行,异步可以大大缩短请求链路耗时时间,比如:发送短信、邮件、异步更新等,这些都是典型的可以通过…

FL水果21最新版本电脑编曲软件FL Studio更新

电脑编曲软件也就是我们常说的宿主软件,英文简称DAW。 FL Studio俗称水果,是一款开发初衷为了电子音乐制作的宿主软件。内置了非常多优秀的合成器以及效果器插件,极为适合于电子音乐的编排。同时FL Studio支持第三方音源插件导入,…

[RootersCTF2019]ImgXweb

目录 信息收集 JWT伪造 工具使用 寻找秘钥 curl 补充知识 信息收集 进入查看源码未发现重要信息 注册admin失败,猜测应该需要垂直越权 先随意注册个账户coleak 登录后发现可以文件上传,上传shell后发现不能连接,执行命令也没有回显…

Linux常用命令——tailf命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) tailf 在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出。 补充说明 tailf命令几乎等同于tail -f,严格说来应该与tail --followname更相似些。当文件改名之后它也能继…

微服务注册中心-Eureka

微服务注册中心-Eureka微服务注册中心-Eureka一、注册中心(Eureka)二、Euraka实现1.eureka-server端(1)新建项目,引入pom依赖(2)编写启动类,引入开启注册中心的注解(3&am…

py第八章 面向对象 笔记

8.1类与对象的基础运用类是抽象的,对象是类的实例8.1.1类的定义class 类名:属性名属性值def 方法名(self):方法体类名:大驼峰命名法:首字母一般为大写方法参数列表中的第一个参数是一个指代对象的默认参数selfclass Car:wheels4def drive(self):print(行…

非常好用,绝对未来黑马的 Python 开源测试框架 PySimpleTest

非常好用,绝对未来黑马的 Python 开源测试框架 PySimpleTest 简单介绍 PySimpleTest 是一个非常简洁开源的python代码测试框架,作者是 https://github.com/Time-Coder?tabstars 你可以在以下网站找到PyPI索引:https://pypi.org/project/P…

CSS 排行榜

CSS 排行榜 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>排行榜</title><style type"text/css">* {margin: 0;padding: 0;}/* 容器 */.rank-container {width: 400px;color: #333;font-size: 14p…

go 常用命令

巩固学习最好的方法是通过go help看文档 GO语言规范文档 终端执行命令 go help environment GOBIN The directory where ‘go install’ will install a command. go 命令使用 go <command> [arguments]command&#xff1a; The commands are:bug start a b…

十、MySQL 聚合函数、分组查询及过滤分组

文章目录一、聚合函数1.1 COUNT()函数1.2 SUM()函数1.3 AVG()函数1.4 MAX()函数1.5 MIN()函数二、分组查询及过滤分组2.1 创建分组2.2 使用HAVING过滤分组2.3 WHERE和HAVING的对比前置知识&#xff1a; 一、数据库开发与实战专栏导学及数据库基础概念入门 二、MySQL 介绍及 MyS…

你知道这些快捷键吗?

今天就给大家带来常用的电脑快捷键&#xff0c;让你的办公和学习效率加倍&#xff0c;一起来看看吧&#xff01; 快捷键一&#xff1a;快速切换窗口 想要快速切换电脑正在使用的窗口程序&#xff0c;就可以使用“AltTab”键即可快速切换。先按住“Alt”按键&#xff0c;再按“T…

GO语言的实战学习(猜谜游戏和在线词典)| 青训营笔记

一.GO语言的实战学习 1.1 前言 在上文我们急速学习了Go语言的入门&#xff0c;今天我们来学习一下Go语言的实战 本专栏代码&#xff0c;源码打包下载地址如下&#xff1a; https://download.csdn.net/download/weixin_52908342/87389481 二.猜谜游戏 1.导入依赖包&#xff…

模拟实现一个简单的命令行解释器(shell)

目录 前言 环境变量与本地变量 和环境变量相关的命令 获取环境变量的三种方法 第一种 第二种 第三种 进程地址空间 页表 为什么存在进程地址空间 第一 第二 第三 进程控制 进程的产生 进程终止 进程等待 进程替换 模拟实现一个shell 前言 我们通过各种指令来实现…

脚手架2 以nacos为注册中心,基于Gateway构架网关

在前一步上已经说明&#xff0c;组件脚手架的第一步就是构建注册中心&#xff0c;由于采用nacos&#xff0c;这些将直接放在配置文件中实现&#xff0c;不再单独搭建eureka。 spring nacos jdk各组件依赖版本推荐 Spring Boot&#xff0c;Spring Cloud&#xff0c;Spring Clo…

HTC Cosmos手柄的坑

HTC Cosmos手柄的坑Unreal蓝图通过手柄射线操作UI用浏览器插件进行游戏界面设计Cosmos手柄遇到的问题Unreal蓝图通过手柄射线操作UI Unreal蓝图通过手柄射线操作UI很简单&#xff0c;虚幻提供一个WidgetInteraction的组件&#xff0c;可以模拟键盘和鼠标操作。 Enable Hit Te…

【最优潮流】二阶锥松弛在配电网最优潮流计算中的应用(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

组件化 – 额外知识补充

1、组件的生命周期 1.1、认识生命周期 什么是生命周期呢&#xff1f; 生物学上&#xff0c;生物生命周期指得是一个生物体在生命开始到结束周而复始所历经的一系列变化过程&#xff1b;每个组件都可能会经历从创建、挂载、更新、卸载等一系列的过程&#xff1b;在这个过程中…