nginx入门 - 学习笔记(ing)

news2024/11/15 11:14:51

一、初识

1、相关概念

1)正向代理

一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标,然后代理向原始服务器转交请求并将获得内容返回给客户端。
在这里插入图片描述

2)反向代理

位于用户与目标服务器之间,但是对于用户而言,反向代理服务器相当于目标服务器,即用户值机额访问反向代理服务器就可以获得目标服务器的资源。用户不需要知道目标服务器的地址,也无需在用户端做任何设定。
在这里插入图片描述

3)负载均衡

指将负载进行平衡、分摊到多个操作单元上进行运行。
在这里插入图片描述

4)动静分离

在web服务器结构中,将静态页面与动态页面或者静态内容接口和动态内容接口分来不同系统访问的架构设计方法,进而提升整个服务器的访问性能和可维护性。

在这里插入图片描述在这里插入图片描述

2、安装

nginx官网
在这里插入图片描述

Linux版本官方安装步骤:
在这里插入图片描述

安装成功:
在这里插入图片描述
安装时存在的问题指路:
linux安装nginx遇到的报错

安装后的资源目录:

类型路径
nginx.conf配置文件etc/nginx/nginx.conf
nginx启动脚本etc/sysconfig/nginx
nginx logvar/log/nginx
nginx pidvar/run/nginx.pid

3、虚拟主机配置

1、配置文件

//查看安装路径
nginx -t

在这里插入图片描述

#设置worker进程的归属  用户 用户组
#user  nobody;
#指定worker进程数 自动
worker_processes  1;

# 设置错误日志的位置
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

# 指定master进程编号 存储的位置
#pid        logs/nginx.pid;


events {
	#单个worker进程最大的连接数
    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;
    
    client_max_body_size 100M;
   
    #gzip  on;

    #一个server就是一个服务
    server {
        listen       80;
        server_name  lcoalhost;

        location / {
			#当前web服务资源存放的位置
            root html;
			index index.html index.html;
        }
		
		#error_page 404    				/404.html;
		error_page 500 502 503 504      /50x.html;
		location = /50x.html{
			root html;
		}
    }
}

4、配置域名

在安装nginx目录下,创建文件夹study、work、relex,并创建文件index.html

在上面配置文件中添加server

user  nginx;
worker_processes  auto;
error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}


http {
	include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80;
        server_name  study.com;
		root /etc/nginx/study;

        location / {
			index index.html; 
        }
    }
    server {
        listen       80;
        server_name  relex.com;
		root /etc/nginx/relex;

        location / {
			index index.html; 
        }
    }    
	server {
        listen       80;
        server_name  work.com;
		root /etc/nginx/work;

        location / {
			index index.html; 
        }
    }
}

以Linux为例,本机去测试。
C:\Windows\System32\drivers\etc中找到host文件,添加192.168.21.129 study.com relex.com work.com
ip地址可以使用ip addr查询
直接访问配置的域名即可。
在这里插入图片描述
三个域名通过CDN服务解析出来的IP应该是同一个,Nginx会根据请求的域名来调用对应的服务来处理请求

4、location匹配规则

location会根据用户请求中的url来匹配上面的/URI表达式,如果可以匹配,选择location{}块中的配置来处理用户请求。

location[=|~*]/uri/ {

}
~标识一个正则匹配,区分大小写
~*标识执行一个正则匹配,不区分大小写
=进行普通字符精确匹配
注意/和{之间的空格

优先级:
在这里插入图片描述

实际使用配置:

//代理
location =/ {
	procy_pass http://tomcat:8080/index
}
//静态文件请求
//目录匹配
location ^~/static/ {
	root/webroot/static/;
}

//后缀匹配
location ~*\.(gif|jpg|jpeg|png|css|js|ico)$  {
	root/webroot/res/;
}
//通用规则,用来转发动态请求到后端应用服务器,非静态文件请求默认是动态
location /  {
	procy_pass http://tomcat:8080/
}

二、应用实战

1、实现反向代理

主要就是在配置文件中,配置

server{
	listen 80;
	server_name localhost;
	location /  {
		#这里的i地址是服务器的地址,端口是项目	
		proxy_pass http://192.168.20.1:8081;
		#提交方式
		proxy_method POST;
	}
}

注意这里的代理请求方式
在这里插入图片描述
在这里插入图片描述

用于将客户端请求转发给后端服务器或负载均衡器,并传递一些请求头信息,以便于日志记录或保留客户端信息

#在localtion中加入
			#将客户端请求的Host头部设置为变量的值,保存客户端请求的服务器名称
			proxy_set_header HOST $host;
			#保存客户端请求的协议(HTTP/HTTPS)
            proxy_set_header X-Forwarded-Proto $scheme;
            #将客户端的真实IP地址传递给后端服务器,而不考虑请求是否经过了代理或负载均衡器
            proxy_set_header X-Real-IP $remote_addr;
            #所有经过的代理服务器的IP地址都追加到 X-Forwarded-For 字段中,以便后端服务器能够获取整个请求链上的IP地址信息
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  • 如果你只关心客户端的真实IP地址,而不需要了解请求的传递路径,可以使用 proxy_set_header X-Real-IP
    $remote_addr; 这个指令,将客户端的真实IP地址直接传递给后端服务器。
  • 如果你需要了解请求的传递路径以及所有经过的代理服务器的IP地址,可以使用 proxy_set_header X-Forwarded-For
    $proxy_add_x_forwarded_for; 这个指令,将整个请求链上的IP地址信息传递给后端服务器。

2、负载均衡

  • 网络负载均衡的大致原理是利用一定的分配策略将网络负载平衡的分摊大网络集群的哥哥操作单元上,使得单个重负载任务能够分担到多个单元上进行处理,使得大量并发访问或数据流量分担到多个单元上分别处理,从而减少用户的等待响应时间
  • upstream是Nginx的HTTP Upstream模块,这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡
#负载均衡配置
upstream web_test {
#服务器列表
  server 192.168.20.1:8081;
  server 192.168.20.1:8082;
   server 192.168.20.1:8083;
}

server{
	listen 80;
	server_name localhost;
	location /  {
	#和upstream是对应的
		proxy_pass http://web_test ;
	}
}
  • server 192.168.20.1:8081 down; 当前服务器停用
  • server 192.168.20.1:8081 backup; 当前服务器是备用服务器
  • server 192.168.20.1:8081 weight; 当前server负载过重,权重越大被请求几率越大,默认是1

3、负载均衡策略

1)轮询

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
会出现会话不一致的问题

2)IP Hash

如果是同一个IP,就分配到一个后端服务器中

在upstream 中加入 ip_hash;

3)权重

服务器性能不一样,性能好的承担更多
可以指定轮询比率,weight和访问几率成正比

server 192.168.20.1:8081 weight=1;
server 192.168.20.1:8082 weight=2;
server 192.168.20.1:8083 weight=3;

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

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

相关文章

电气防火限流式保护器在汽车充电桩使用上的作用

【摘要】 随着电动汽车行业的不断发展,电动汽车充电设施的使用会变得越来越频繁和广泛。根据中汽协数据显示,2022年上半年,我国新能源汽车产销分别完成266.1万辆和260万辆,同比均增长1.2倍,市场渗透率达21.6%。因此,电动汽车的安全…

C语言,vs各种报错分析(不断更新)

1.引发了异常: 写入访问权限冲突2.#error: Error in C Standard Library usage 1.引发了异常: 写入访问权限冲突 这里是malloc没有包含头文件<stdlib.h>&#xff0c;包含之后就好了 2.#error: Error in C Standard Library usage 这里就是用C语言写程序时使用了C的头文件…

特大消息春秋链向web4.0进军

新疆春秋文创科技股份有限公司7月28日在新疆春秋艺术博物馆召开了“春秋链开放网络白皮书”新闻发布会。 该公司CEO高建新先生介绍说&#xff1a;“筹建春秋链开放网络是新疆春秋文创科技股份有限公司未来的重要项目&#xff0c;是公司的第一个五年发展计划&#xff0c;将在未来…

详解主流的Hybrid App 技术框架与研发方案

移动操作系统在经历了诸神混战之后&#xff0c;BlackBerry OS、Symbian OS、Windows Phone等早期的移动操作系统逐渐因失去竞争力而退出。目前&#xff0c;市场上主要只剩下安卓和iOS两大阵营&#xff0c;使得iOS和安卓工程师成为抢手资源。然而&#xff0c;由于两者系统的差异…

嵌入式工程师面试经常遇到的30个经典问题

很多同学说很害怕面试&#xff0c;看见面试官会露怯&#xff0c;怕自己的知识体系不完整&#xff0c;怕面试官考的问题回答不上了&#xff0c;所以今天为大家准备了嵌入式工程师面试经常遇到的30个经典问题&#xff0c;希望可以帮助大家提前准备&#xff0c;不再惧怕面试。 1&a…

C++ 自定义数据类型

C自定义数据类型有&#xff1a;枚举类型、结构类型、联合类型、数组类型、类类型 1. typedef 声明 在编写程序时&#xff0c;除了可以使用内置的基本数据类型名和自定义的数据类型名以外&#xff0c;还可以为一个已有的数据类型另外命名。这样&#xff0c;就可以根据不同的应…

《MySQL》第十三篇 SELECT * 和 SELECT 字段名的区别

在实际开发中&#xff0c;进行数据查询的SQL无非有两种写法&#xff0c;使用SELECT * from tableName或者SELECT 字段名(多个) from tableName&#xff0c;二者各有利弊 SELECT * 写法 优点&#xff1a; 写法简单&#xff0c;不需要手动输入具体的字段&#xff0c;一定程度上…

【【萌新的stm32学习-2】】

萌新的stm32学习-2 STM32 启动模式 可以通过BOOT0和BOOT1 引脚设置启动模式 BOOT1 BOOT0 X 0 启动模式 主闪存存储器 0 1 系统存储器 1 1 选择 内置SRAM&#xff08;少&#xff09; 我们使用串口给 STM32 下载程序&#xff0c;但是串口下载并不能仿真调试代码&#xff0c;只…

程序员做项目必用的工具【更新中...】

每个程序员多多少少都会有自己简化项目的小工具&#xff0c;我采访了我们公司所有的工程师总结了程序员必备工具篇。 一.unisms 官网&#xff1a;https://unisms.apistd.com/ 不会有人这年头写注册登录还是自己写验证码模块吧&#xff1f; 你该得拥有一个短信验证码平台了&…

【雕爷学编程】MicroPython动手做(24)——掌控板之拓展掌控宝2

掌控拓展板(parrot)是掌控板衍生的一款体积小巧、易于携带的拓展板。支持电机驱动、语音播放、语音合成等功能的IO引脚扩展板,可扩展12路IO接口和2路I2C接口。 技术参数 该板具有以下特性: 两路DC马达驱动,单路电流150mA 支持音频功放和喇叭输出(掌控板P8&#xff0c;P9引脚…

不可错过的家装服务预约小程序商城开发指南

在当今社会&#xff0c;家装行业发展迅速&#xff0c;越来越多的人开始寻求专业的家装预约和咨询服务。对于不懂技术的新手来说&#xff0c;创建一个自己的家装预约咨询平台可能听起来很困难&#xff0c;但实际上通过一些第三方制作平台和工具&#xff0c;这个过程可以变得简单…

网络安全学习笔记——burp和SqlMap的tips

一、Burp 爆破 1、Burp爆账号密码 burp爆破的前提条件——该网站账号密码没有进行加密而是明文&#xff0c;且验证码可以重复使用&#xff0c;如下图数据包中直接显示账号与密码且验证码不需要重复提交&#xff08;此处需要自己使用burp进行测试&#xff09; 1、进入burp&am…

生态伙伴 | 华秋硬创联合长虹创投,共同打造更优生态系统

01大赛介绍 中国硬件创新创客大赛始于2015年&#xff0c;由深圳华秋电子有限公司主办&#xff0c;至今已经成功举办八届&#xff0c;赛事范围覆盖华南、华东、华北三大地区&#xff0c;超10个省市区域。 大赛影响了超过45万工程师群体&#xff0c;吸引了35000多名硬创先锋报名参…

Android 之 TelephonyManager (电话管理器)

本节引言&#xff1a; 本章节是Android基础入门教程的最后一章&#xff0c;主要讲解是一些零零散散的一些知识点&#xff0c;以及一些遗漏 知识点的补充&#xff0c;这些零散的知识点包括&#xff0c;各种系统服务的使用&#xff0c;比如本节的电话管理器&#xff0c;短信管理器…

ALLEGRO之Place

本文主要讲述了ALLEGRO的Place菜单。 &#xff08;1&#xff09;Manually&#xff1a;手动放置&#xff0c;常用元器件放置方法&#xff1b; &#xff08;2&#xff09;Quickplace&#xff1a;快速放置&#xff1b; &#xff08;3&#xff09;Autoplace&#xff1a;自动放置&a…

ARM裸机-9

1、ARM汇编指令集 1.1、两个概念&#xff1a;指令与伪指令 (汇编) 指令是CPU机器指令的助记符&#xff0c;经过编译后会得到一串10组成的机器码&#xff0c;可以由CPU读取执行。 (汇编)伪指令本质上不是指令 (只是和指令一起写在代码中)&#xff0c;它是编译器环境提供的&…

最新版CleanMyMac X4.14.1苹果电脑系统数据清理工具

最新版CleanMyMac X 让您的Mac焕然一新&#xff0c;时刻保持安全CleanMyMac X是一款专业的Mac清理软件&#xff0c;可智能清理mac磁盘垃圾和多余语言安装包&#xff0c;快速释放电脑内存&#xff0c;轻松管理和升级Mac上的应用。同时CleanMyMac X可以强力卸载恶意软件&#xff…

【Git系列】了解什么是版本控制

&#x1f433;了解什么是版本控制 &#x1f9ca;1. 什么是版本控制&#x1f9ca;2. 为什么要有版本控制&#x1f9ca;3. 常见的版本控制工具&#x1f9ca;4. 版本控制分类&#x1fa9f;4.1 本地版本控制&#x1fa9f;4.2 集中版本控制&#x1fa9f;4.3 分布式版本控制 学习git之…

socket 基础

Socket是什么呢&#xff1f; ① Socket通常也称作“套接字”&#xff0c;用于描述IP地址和端口&#xff0c;是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。 ② Socket是连接运行在网络上的两个程序间的双向通信的端点。 ③ 网络通讯其实指…

1.1.2 SpringCloud 版本问题

目录 版本标识 版本类型 查看对应版本 版本兼容的权威——官网&#xff1a; 具体的版本匹配支持信息可以查看 总结 在将Spring Cloud集成到Spring Boot项目中时&#xff0c;确保选择正确的Spring Cloud版本和兼容性是非常重要的。由于Spring Cloud存在多个版本&#xff0c;因此…