nginx配置详解

news2024/9/23 5:32:47

nginx

是一个高性能的HTTP 和反向代理服务器,特点是占有内存少,并发能力强

用途:

  1. 可以作为静态页面的 web 服务器
  2. 正向代理(通过nginx代理 访问外部资源,比如fanqiang)
  3. 反向代理 (隐藏真实服务器地址,通过nginx反向访问实际服务器)
  4. 负载均衡 (相同请求分发到多台服务器)
  5. 动静分离 (把动态资源和静态资源分开部署)

配置:

配置文件内容

  1. 全局块:配置服务器整体运行的指令 例:worker_processes 1;#处理并发数配置
  2. events块:影响服务器与用户的网络连接 例:worker_connections 1024; #支持的最大连接数为1024
  3. http块
  • http全局块:http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等

  • server块:这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了
    节省互联网服务器硬件成本。
    每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
    而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块

    读取其它server块配置文件

    include vhost/*.conf;
    

1、全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
2、location 块
一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称
(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓
存和应答控制等功能,还有许多第三方模块的配置也在这里进行

应用

反向代理
  1. 方式1 效果:访问8080端口 跳转到8088服务
server {	
	listen       8080;
	server_name  localhost;
	client_max_body_size 1024M;
	location / {
	proxy_pass <http://localhost:8088;
	index  index.html index.htm;
	}
}

注:localhost可替换成实际ip
2. 方式2 效果:根据访问的路径跳转到不同端口的服务中

  • 访问http://127.10.0.1:8081/test1/ 跳转到http://127.10.0.1:8088
  • 访问http://127.10.0.1:8081/test2/ 跳转到http://127.10.0.1:8082
server {
	listen       8081;
	server_name  localhost;
	client_max_body_size 1024M;
	location ~ /test1/ {
		proxy_pass http://localhost:8088;
	}
	location ~ /test2/ {
		proxy_pass  http://localhost:8082;
	}
}

在这里插入图片描述

  1. = :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配
    成功,就停止继续向下搜索并立即处理该请求。
  2. ~:用于表示 uri 包含正则表达式,并且区分大小写。
  3. ~*:用于表示 uri 包含正则表达式,并且不区分大小写。
  4. ^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
    注意:如果 uri 包含正则表达式,则必须要有~ 或者 ~ 标识。*
负载均衡

效果:访问nginx 8083代理地址 随机访问到两台主机8088地址
在http全局块中

http {
	upstream myserver{
	server 192.168.6.40:8088 weight=10;
	server 192.168.6.162:8088 weight=10;
}
server {
	listen       8083;
	server_name  localhost;
	client_max_body_size 1024M;
	location / {
		proxy_pass http://myserver>;
	}
}
分配策略
  1. 轮询(默认)
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

  2. weight
    weight 代表权,重默认为 1,权重越高被分配的客户端越多
    指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。 例如:

    upstream myserver{
    server 192.168.6.40:8088 weight=10;
    server 192.168.6.162:8088 weight=10;
    }

  3. ip_hash
    每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。 例如:

upstream myserver{ 
		ip_hash
		server 192.168.6.40:8088; 
		server 192.168.6.162:8088; 
	}
  1. fair(第三方)
    按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream myserver{ 
		server 192.168.6.40:8088; 
		server 192.168.6.162:8088; 
		fair;
	}
动静分离

将动态请求和静态请求分开,nginx处理静态页面,tomcat处理动态页面 通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使
浏览器缓存过期时间,减少与服务器之前的请求和流量

server {
	listen       8080;
	server_name  localhost;
	client_max_body_size 1024M;
	location / {
	root D:\htmlTest;
	index  index.html index.htm;
}
location /api/ {
	proxy\_pass http://localhost:8088;
	}
}
  1. 代理websocket服务
server {
	listen       80;
	server_name  localhost;
	client_max_body_size 1024M;
	location / {
	#root html;
	proxy_pass http://localhost:8088;  #websocket地址
	#index  index.html index.htm;
	proxy_http_version 1.1;
	proxy_set_header Upgrade $http_upgrade; #方式
	proxy_set_header Connection "upgrade";  #方式
	proxy_read_timeout 3600s;
	}
}
高可用集群
Keepalived+Nginx 主从模式
Keepalived+Nginx 双主模式

nginx的日志文件

  • /var/log/nginx

    try_files $uri $uri/ /index.html;

nginx解决跨域请求

同源指 域名、协议、端口均相同

前后端分离项目,无论是否部署在同一台机器上,都应尽量使前后端项目暴露于同一域下【协议+主机+端口都相同】,方法就是在部署前端得Nginx上,使用同一个域来反向代理后端项目

  • 好处
  1. 彻底、一劳永逸解决跨域
  2. 共享域名
  3. 利用反向代理隐藏后端地址
  4. 集中管理
  5. 配置方式
    server {
    # 0.与浏览器交互的只有这个Nginx虚拟服务器,浏览器看到的【协议+主机+端口】永远只有一个,整个交互过程始终处于同一域下,故不会出现跨域问题
	listen 80;
	server_name localhost;;
    # 1.前端项目打包好的dist目录,放置到这个目录下
    root /data/;

    # 2.后端多个微服务接口通过统一网关(9000)对外暴露,nginx反向代理统一网官 
    # 3.【code|auth|admin|buy】是后端各微服务接口前缀,网关按这个前缀来路由请求。
    location ~* ^/(code|auth|admin|buy) {
       proxy_pass http://127.0.0.1:9000;
       #proxy_set_header Host $http_host;
       proxy_connect_timeout 15s;
       proxy_send_timeout 15s;
       proxy_read_timeout 15s;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}

一个完整的例子

  server {
            listen       8087;
            server_name  localhost;

            #charset koi8-r;

            #access_log  logs/host.access.log  main;


            location / {
                 root /usr/local/package/front/ps_report;
                 try_files $uri $uri/ /index.html;
            }

            location /api/ {
                 proxy_pass http://172.16.85.52:8082;
             }
            location /wx/ {
                 proxy_pass http://172.16.85.52:8082;
             }

            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }

https配置

   listen 443 ssl;
    ssl_certificate /home/httpscerts/cmfullchaincert.cer;
    ssl_certificate_key /home/httpscerts/cmkey.key;
    server_name tmp5.raisetech.cn;

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

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

相关文章

创建vite项目

前提&#xff1a;Vite需要Node.js版本> 12.0.0 1. 创建文件夹&#xff0c;文件夹下打开cmd,输入 yarn create vite C:\Users\admin\Desktop\new>yarn create vite 2. 进行选择 3. vite.config.js 配置 &#xff08;注意按目录创建global.scss&#xff09; import …

关于射频测试电缆 这些知识你知道吗?

射频电缆组件的正确选择除了频率范围&#xff0c;驻波比&#xff0c;插入损耗等因素外&#xff0c;还应考虑电缆的机械特性&#xff0c;使用环境和应用要求&#xff0c;另外&#xff0c;成本也是一个永远不变的因素。以下带大家了解射频电缆相关知识。 射频电缆组件的基本选择原…

【附源码】Python计算机毕业设计网上宠物商店系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Android 天气APP(三十六)运行到本地AS、更新项目版本依赖、去掉ButterKnife

运行到本地AS、更新项目版本依赖、去掉ButterKnife前言正文一、新版Android Studio编译运行① 升级项目gradle版本② 切换JDK版本③ BuildConfig报错二、百度的SDK使用① 开发版SHA1的作用是什么&#xff1f;② 什么时候需要更换开发版SHA1&#xff1f;③ 怎么获取开发版SHA1&a…

STM8S系列基于STVD开发,ADC不同精度采样示例

STM8S系列基于STVD开发&#xff0c;ADC不同精度采样示例&#x1f4cc;相关篇《STM8S系列基于STVD开发&#xff0c;自定义printf函数TIM5精确延时函数模块化工程示例》 ✨本工程以上面一篇的工程为模板&#xff0c;在此基础上实现ADC电压采样。 &#x1f3ac;&#x1f4fd;&…

java 读取resource下的文件

目录一、普通main代码里使用1.假设有如下结构的代码&#xff08;1&#xff09;、main方法里复制resource下的文件&#xff08;2&#xff09;、main方法里读取resource下的文件2.假设有如下结构的代码二、对于springboot项目读取resource下的资源文件一、普通main代码里使用 1.…

虚拟主播是什么,有什么技术原理?- 沉睡者IT

虚拟主播是什么&#xff1f;虚拟形象人物是通过人工智能技术的研究和积累&#xff0c;在克服了计算机图形学和AI核心技术的各个学科的智能化、平台化、虚拟人、虚拟内容在各个维度的技术难题后&#xff0c;提供给用户的核心资产。虚拟主播指的是在视频网站上使用虚拟图片进行投…

C. Bargain(数学贡献法)

Problem - 1422C - Codeforces 有时&#xff0c;要在讨价还价中达成协议并不容易。现在&#xff0c;萨沙和沃瓦就无法达成协议。萨沙说出了一个尽可能高的价格&#xff0c;然后沃瓦想从这个价格中删除尽可能多的数字。更详细地说&#xff0c;Sasha说出某个整数的价格n&#xff…

[R]第二节 练习一关于数值向量

1.产生一个等差数列(1,3,5,7,……,99)赋值给向量x x <- array(seq(from1, to99, by2)) seq函数解析 seq(from,to,length)该函数的意思是生成一组数字&#xff0c;从from开始&#xff0c;到to结束&#xff0c;每两个数间的间隔是length,如: seq(2,10,2),会生成一组数&…

ROS1学习笔记:服务中的Service和Client(ubuntu20.04)

参考B站古月居ROS入门21讲&#xff1a; 客户端Client的编程实现 服务端Server的编程实现 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录一、小乌龟例程中的服务二、创建功能包三、创建Client代码3.1 以C为例3.1.1 配置Client代码编译规则3.1.2 编译整个工作空间3.1.3 配置…

12 张图看懂 CPU 缓存一致性与 MESI 协议,真的一致吗?

本文已收录到 GitHub AndroidFamily&#xff0c;有 Android 进阶知识体系&#xff0c;欢迎 Star。技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 进 Android 面试交流群。 前言 大家好&#xff0c;我是小彭。 在上一篇文章里&#xff0c;我们聊到了 CPU 的三级缓存结构…

测试工作3年还在基础岗?可能只是因为你的工作能力差

对于职场人而言&#xff0c;工作中升职加薪是每个人都梦寐以求的事情&#xff0c;但有些小伙伴表示&#xff0c;自己来到一个公司三年&#xff0c;却依旧停留在基础岗位上&#xff0c;究竟是什么原因呢&#xff1f; 其实从根本来说&#xff0c;很有可能只是因为&#xff1a;你…

Spring Boot日志配置及输出

1.日志框架有哪些&#xff1f; 常见的日志框架有log4j、logback、log4j2。 log4j这个日志框架显示是耳熟能详了&#xff0c;在Spring开发中是经常使用&#xff0c;但是据说log4j官方已经不再更新了&#xff0c;而且在性能上比logback、log4j2差了很多。 logback是由log4j创始…

WebRTC系列<四> 全面了解客户端-服务器网页游戏的WebRTC

转载&#xff1a;https://blog.brkho.com/2017/03/15/dive-into-client-server-web-games-webrtc/ 多人游戏很有趣。对于他们在单人沉浸感方面所缺乏的东西&#xff0c;在线游戏弥补了与朋友一起探索、在线结识陌生人以及与有能力的同龄人正面交锋的独特奖励体验。人们只需要看…

C# Control.DoubleBuffered 属性的使用

C# Control.DoubleBuffered 属性的使用 在我们开发的过程中,经常需要对界面进行美化,而美化的过程,一般来说就是添加图片, 让界面更加清新脱俗,更加耳目一新。 有一次有一个软件发送到客户那里试用,客户对功能是非常满意的,但是对界面的布局和颜色,就大为不满。 原来…

【Hack The Box】windows练习-- Resolute

HTB 学习笔记 【Hack The Box】windows练习-- Resolute &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年9月7日&#x1f334; &#x1…

uniapp picker 的使用,这玩意做的真不怎么样

uniapp picker 的使用&#xff0c;这玩意做的真不怎么样 最近要做小程序&#xff0c;考虑到需要多平台都用一套东西&#xff0c;就选用了 uniapp。 在写表单的时候用到它的 picker 组件&#xff0c;看官方文档楞是没看明白怎么用&#xff0c;试了半天没试出来&#xff0c;还是…

每日一题 —— LC. 790 多米诺和托米诺

有两种形状的瓷砖&#xff1a;一种是 2 x 1 的多米诺形&#xff0c;另一种是形如 “L” 的托米诺形。两种形状都可以旋转。 给定整数 n &#xff0c;返回可以平铺 2 x n 的面板的方法的数量。返回对 10^9 7 取模 的值。 平铺指的是每个正方形都必须有瓷砖覆盖。两个平铺不同&…

数据集成平台关于【源平台调度任务生命周期】

任务调度者 调度事件生产任务调度任务池-异步
AsynDispatcher --source 实例化适配器执行 消费任务实例化集成应用 DataHub Instance
handleSourceDispatch()依赖注入集成方案适配器调度条件检查执行适配器调度方法联动其它方案调度任务 SourceEvent 适配器调度周期 初始化…

化合物应用 | 动物实验溶剂选择

在给药时为了实现药物准确运送到动物体内、减少溶剂本身的副作用和毒性等的目标&#xff0c;需要选择合适的溶剂配方。溶剂的理化性质&#xff0c;如 pH、粘稠度、渗透压等都会对给药产生影响&#xff0c;需要慎重考虑。例如粘稠度过高可能会导致注射用针头的堵塞&#xff0c;粘…