Nginx初体验

文章目录

  • 定义
  • 正向代理 & 反向代理
  • 安装与尝试

之前没怎么用过代理服务器Nginx,主要也是因为没有架构知识,根本不会去部署相关的机器。但是最近公司内部在调试的时候,经常用本机去充当Ngnix代理服务器,由于对这块知识掌握得还不是很牢固,因此自发对它进行一个简单的扫盲学习。

主要参考 快速入门:大白话梳理Nginx,全网最通俗易懂 - 知乎 (zhihu.com)

定义

Nginx (engine x) 是一个高性能的 HTTP反向代理 web服务器

正向代理 & 反向代理

正向代理,就是客户端将自己的请求率先发给代理服务器,通过代理服务器将请求转发给服务器。我们常用的VPN就是一种代理服务器,为了可以连上国外的网站,客户端需要使用一个可以连接外网的服务器作为代理,并且客户端能够连接上该代理服务器。
在这里插入图片描述

反向代理与正向代理不同,正向代理是代理了客户端,而反向代理则是代理服务器端。在有多台服务器分布的情况下,为了能让客户端访问到的IP地址都为同一个网站,就需要使用反向代理。
在这里插入图片描述

从图中可以看出,比方说服务器-1的IP:port是localhost:8080,但是却可以反向代理后面三个服务器-2,服务器-3,服务器-4,至于选择哪个服务器和端口,有一个负载均衡策略在里面。

安装与尝试

直接 homebrew 在mac上安装ngnix,安装目录在 /opt/homebrew/etc/nginx,后面的一系列配置都在 nginx.conf,我们新建目录 myconf 来保存后面运行的各种目录,这里用之前老的nginx一直访问不了网页,准备直接删了重新下载了。

Bug1: HomeBrew出了点问题,brew search nginx说github凭证失效了,重新上这个网址https://github.com/settings/tokens/new?scopes=gist,repo,workflow&description=Homebrew配了个永久的token

Warning: Error searching on GitHub: GitHub API Error: Requires authentication
The GitHub credentials in the macOS keychain may be invalid.
Clear them with:printf "protocol=https\nhost=github.com\n" | git credential-osxkeychain erase
Create a GitHub personal access token:
https://github.com/settings/tokens/new?scopes=gist,repo,workflow&description=Homebrew
echo 'export HOMEBREW_GITHUB_API_TOKEN=your_token_here' >> ~/.zshrc

Bug2: install nginx找不到版本,那是因为homebrew目录树老了

brew install nginx
Error: nginx: unknown or unsupported macOS version: :dunno

brew update-reset 解决

Nginx卸载安装的命令如下:

brew uninstall nginx
brew install nginx
brew info nginx # 之前就是不会用这个命令查看各种配置,导致自己找来找去

原始网页都放在 /opt/homebrew/var/www/ 这个目录下面,当然也可以我们自己去配置网页

sudo nginx -c /opt/homebrew/etc/nginx/nginx1.conf # 根据配置文件启动
ps -ef|grep nginx # 启动完以后可以找到对应的线程去杀死

最终配置文件nginx1.conf如下:

#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;server {# 所有被反向代理的服务器都指向该端口listen       802;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;# 匹配到/A路径的时候,就会进行反向代理location /A {# 反向代理到/opt/homebrew/etc/nginx/mypage 下root   /opt/homebrew/etc/nginx/mypage;# 默认主页的网址,在上面root路径下index  index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {#    listen       8000;#    listen       somename:8080;#    server_name  somename  alias  another.alias;#    location / {#        root   html;#        index  index.html index.htm;#    }#}# HTTPS server##server {#    listen       443 ssl;#    server_name  localhost;#    ssl_certificate      cert.pem;#    ssl_certificate_key  cert.key;#    ssl_session_cache    shared:SSL:1m;#    ssl_session_timeout  5m;#    ssl_ciphers  HIGH:!aNULL:!MD5;#    ssl_prefer_server_ciphers  on;#    location / {#        root   html;#        index  index.html index.htm;#    }#}include servers/*;
}

上面注意,自定义location /A 虽然是根据/A完成了匹配,但是到root里面去查找对应的资源的时候,也需要走进/A这个路径,也就是在root目录/opt/homebrew/etc/nginx/mypage下还需要创建一个A目录,这才能既匹配又能够访问。在 /opt/homebrew/etc/nginx/mypage/A 里面放上一个index.html页面就行。

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

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

相关文章

leetcode—搜索二维矩阵II

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1: 输入:matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,2…

springboot(ssm校园便利平台 校园跑腿管理系统Java系统

springboot(ssm校园便利平台 校园便利店管理系统Java系统 开发语言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7(或8.0) …

【计算机网络】网络层——详解IP协议

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】 本专栏旨在分享学习计算机网络的一点学习心得,欢迎大家在评论区交流讨论💌 目录 🐱一、I…

JavaScript三元运算的基本语法是什么?

JavaScript中的三元运算是一种简洁的if-else表达方式,其基本语法如下: condition ? exprIfTrue : exprIfFalse其中,condition是一个返回值为布尔类型的表达式,exprIfTrue和exprIfFalse是在条件为真或假时执行的表达式。如果cond…

第29集《佛法修学概要》

丁三、声闻乘 分二:戊一、释义;戊二、四谛法;戊三、结示 请大家打开讲义第八十二页。我们看丁三,声闻乘。 在祖师大德的判教当中,把我们整个大乘的成佛之道分成了三个部分:第一个是安乐道,第…

【链路层】点对点协议 PPP

目录 1、PPP协议的特点 2、PPP协议的组成和帧格式 3、PPP协议的工作状态 目前使用得最广泛的数据链路层协议是点对点协议PPP(Point-to-Point Protocol)。 1、PPP协议的特点 我们知道,互联网用户通常都要连接到某个 ISP 才能接入到互联网。PPP 协议就是用户计算机…

全罐喂养是什么意思?适合猫咪全罐喂养的猫罐头推荐

猫咪全罐喂养的风一直挺大的,但是有好多养猫人一直不知道全罐喂养是什么意思,作为铲龄6年的宠物店店长,从早几年就开始全罐喂养了,对各个品牌的猫罐头也都很熟悉。 作为铲屎官,我们都想要给我猫猫吃的更好&#xff0c…

排序算法-希尔排序(含C语言代码示例)

一、算法介绍 希尔排序是一种基于插入排序的高效、不稳定的排序算法,它通过对待排序序列进行一系列间隔划分的子序列排序来改进插入排序的性能。该算法的基本思想是先将整个序列分割成若干个子序列,然后分别对各个子序列进行插入排序。这一过程通过逐渐减…

Redis面试题17

Redis 是如何处理并发访问的?有没有并发控制机制? 答:Redis 是单线程的,它使用了基于事件驱动的模型来处理并发访问。Redis 使用一个主事件循环来监听并处理客户端的连接和操作请求。 对于并发访问,Redis 使用了以下几…

openssl3.2 - 官方demo学习 - signature - rsa_pss_hash.c

文章目录 openssl3.2 - 官方demo学习 - signature - rsa_pss_hash.c概述笔记END openssl3.2 - 官方demo学习 - signature - rsa_pss_hash.c 概述 对私钥对明文做签名(摘要算法为SHA256) 用公钥对密文做验签(摘要算法为SHA256) 笔记 /*! \file rsa_pss_hash.c \note openss…

[足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-16 Robust Controller非线性鲁棒控制器

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-Advanced控制理论 Ch04-16 Robust Controller非线性鲁棒控制器 1. Slide Control 滑膜控制2 High Gain High Frequency3. 三种鲁棒控制器的比较如何分析控制器 Robust Control : tp achieve rob…

基于云平台技术的GPS定位的浅谈

基于云平台技术的GPS定位的创新主要体现在以下几个方面: 数据存储和处理:云平台可以提供大规模的数据存储和计算资源,能够实时处理大量的GPS定位数据,提高了定位系统的处理能力和响应速度。 动态扩展性:云平台的弹性伸…

鸿蒙开发笔记(九):渲染控制,if/else,ForEach,LazyForEach

ArkUI通过自定义组件的build()函数和builder装饰器中的声明式UI描述语句构建相应的UI。在声明式描述语句中开发者除了使用系统组件外,还可以使用渲染控制语句来辅助UI的构建,这些渲染控制语句包括控制组件是否显示的条件渲染语句,基于数组数据…

【代码随想录05】242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

目录 242.有效的字母异位词题目描述做题思路参考代码 349. 两个数组的交集题目描述做题思路参考代码 202. 快乐数题目描述做题思路参考代码 1.两数之和题目描述参考代码 242.有效的字母异位词 题目描述 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字…

父组件中 arr.push改变数组,但是子组件监听不到 arr 的变化

目录 一、问题 二、解决方法 三、总结 tiips:如嫌繁琐,直接移步总结即可! 一、问题 1.真是奇怪呀,一般来说通过 push方法改变 数组,是一定会有响应式的,那就可以监听到变化。但是我今天却遇到了一件奇怪的事情。在…

k8s创建资源对象过程

我们都知道,K8S中一切皆资源,在使用K8S时,所有的pod或者controller都是通过yaml文件进行创建的。 那么接下来,就和大家一起看一下K8S是如何创建资源的。 创建资源对象的过程 Deployment是一种常见的资源对象。在Kubernetes系统…

pytorch学习(一)、tensorboard和torchvision

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、os模块二、from torch.utils.data import Dataset三、from torch.utils.tensorboard import SummaryWriter四、from torchvision import transforms五、torchvi…

JS数据的扁平化处理

1.纯数组扁平化 // 给定的数组 const arr [1, [2, [3, 4, [5], 6], 7], 8, [9, [10, 11], 1], 2];// 定义一个函数,用于将嵌套数组展平为一维数组 function flattenArray(obj [], res []) {// 如果输入为空数组,直接返回空数组if (!obj) return;// 遍…

高精度算法笔记·····························

目录 加法 减法 乘法 除法 高精度加法的步骤&#xff1a; 1.高精度数字利用字符串读入 2.把字符串翻转存入两个整型数组A、B 3.从低位到高位&#xff0c;逐位求和&#xff0c;进位&#xff0c;存余 4.把数组C从高位到低位依次输出 1.2为准备 vector<int> A, B, …

考研机试题收获——高精度进制转换

代码的第一遍真的很重要&#xff0c;在第一次打的时候尽量把问题思考全面&#xff0c;不要漏打少打&#xff0c;尽量不要留bug给之后de。 一、基础方面 一、处理输出的结束问题 scanf和cin默认都不会读取空格 ①scanf()&#xff1a;如果从文件中读取数据&#xff0c;当scanf()…