一个nginx部署多个应用及nginx总结

news/2024/7/8 6:18:32

一、背景知识

1、Nginx是什么?

&:Web服务器,静态文件保存、响应http请求。
同时可以提供代理、负载均衡的功能。

2、为什么使用?

&:主要是轻量级和高性能,在一般行业不明显,但在互联网行业极致性能压榨就凸显了。
另外,功能实用,玩的花样多,如负载均衡、代理等。

3、为什么Nginx性能这么高?

因为他的事件处理机制:异步非阻塞事件处理机制:运用了epoll模型,提供了一个队列,排队解决

二、如何使用

1、参数配置

参数格式,块的形式,类似json但无冒号,注意结尾必须有分号。
参数类型:3类;

  1. 全局【nginx产品相关】、
  2. event块【网络】、
  3. http【功能】
    以一个完整的配置为例。
Global: nginx 运行相关
  Events: 与用户的网络连接相关
  http
    http Global: 代理,缓存,日志,以及第三方模块的配置
    server
        server Global: 虚拟主机相关
        location: 地址定向,数据缓存,应答控制,以及第三方模块的配置
worker_processes  1# worker进程的数量
events {                              			# 事件区块开始
	worker_connections  1024# 每个worker进程支持的最大连接数
}                               			# 事件区块结束
http {                           			# HTTP区块开始
	include       mime.types;         			# Nginx支持的媒体类型库文件
	default_type  application/octet-stream;            # 默认的媒体类型
	sendfile        on;       				# 开启高效传输模式
	keepalive_timeout  65# 连接超时
	server {            		                # 第一个Server区块开始,表示一个独立的虚拟主机站点
		listen       80# 提供服务的端口,默认80
		server_name  localhost;    			# 提供服务的域名主机名
		location / {            	        	# 第一个location区块开始
			root   html;       			# 站点的根目录,相当于Nginx的安装目录
			index  index.html index.htm;       	# 默认的首页文件,多个用空格分开
		}          				        # 第一个location区块结果
		error_page   500502503504  /50x.html;          # 出现对应的http状态码时,使用50x.html回应客户
		location = /50x.html {          	        # location区块开始,访问50x.html
			root   html;      		      	        # 指定对应的站点目录为html
		}
	}  

三、如何部署多个前端应用

有3种方式:端口区分、域名区分、url区分。

1、端口区分

关键:配置2个server,监听不同端口,root指向不同目录。
参考:

	######通过端口区分应用   begin
  server {
      listen       9001;
      server_name  localhost;
  	 
      location / {
          root   html;
          index  index.html index.htm  abc.html;
  		if ( $request_method = OPTIONS ) { return 204; }
      }
      error_page   500 502 503 504  /50x.html;
      location = /50x.html {
          root   html;
      }

  }
  server {
      listen       9002;
      server_name  localhost;
  	 
      location / {
          root   html_kanban;
          index  index.html index.htm  abc.html;
  		if ( $request_method = OPTIONS ) { return 204; }
      }
      error_page   500 502 503 504  /50x.html;
      location = /50x.html {
          root   html;
      }

  }
  ######通过端口区分应用   end

2、域名区分

关键:配置2个server:端口相同,server_name不同,根据传入的http请求域名区分。

	######通过域名区分应用   begin
  server {
      listen       80;        
      server_name  aaa;

      location / {
          root   html_ifis;
          index  index.html index.htm;
  		error_page 404 / ;
      }				
  	
  	location /kanban/ {
          alias  D:/nginx-1.22.0/html_kanban;
          index  index.html index.htm;
  		error_page 404 / ;
      }
  }	
  
  server {
      listen       80;        
      server_name  bbb;

      location / {
          root   html_kanban;
          index  index.html index.htm;
  		error_page 404 / ;
      }				
  	
  	## 配置开发环境对应的proxy
  	location /api/ {
  		proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header;
  		proxy_set_header Host $host;
  		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  		proxy_pass http://127.0.0.1:8095;  #机器ip
  		expires 0;
      }
  }
  ######通过域名区分应用   end

3、url区分

没搞成。

总结:

  1. 参数server的配置是指虚拟的server;比如可以监听相同的端口。这点与后端的应用不同,后端如果监听相同端口,会报端口冲突。
  2. server.location参数:可以指定本地目录,做直接访问;也可以转发,也就是逆向代理。
  3. 逆向代理也是实现跨域的一种方式:老web中,直接暴露了后端,浏览器直接对后端请求,后端设置了允许跨域;新web中,webpack支持代理(部署时同样配置nginx的代理),前端访问的特定开头的url(/api)。

参考

Nginx面试题:https://www.nginx.org.cn/article/detail/451
Nginx能做什么:https://www.cnblogs.com/dongye95/p/11059024.html


http://lihuaxi.xjx100.cn/news/76846.html

相关文章

使用docker快速搭建运维神器-spug

大家好,我是早九晚十二,目前是做运维相关的工作。写博客是为了积累,希望大家一起进步! 我的主页:早九晚十二 什么是spug? 面向中小型企业设计的轻量级无 Agent 的自动化运维平台,整合了主机管理…

C++泛型编程:可变参数模板

最近在看有关智能指针源码的时候make_unique,make_shared(用来创建管理一个新对象)模板都是这么定义的 template<typename T, typename... Ts> std::unique_ptr<T> make_unique(Ts&&... params) {return std::unique_ptr<T>(new T(std::forward<…

(附源码)计算机毕业设计ssm黑河市劳务人员管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

再学 PHP 基础 之 数组排序函数总结

文章目录排序函数汇总对比排序类型标志按【值】排序的函数array_multisort()asort()arsort()natcasesort()natsort()sort()rsort()shuffle()按【键】排序的函数ksort()krsort()uksort()自定义比较函数uasortuksort()usort()打乱数组&#xff08;随机排序&#xff09;shuffle()排…

FIT5217 Natural language processing学习经验贴

一、课程简介 这门课就是我们口中常说的nlp&#xff0c;课程包含三部分&#xff0c;第一部分是上午的lecture,这部分主要是老师上课讲课&#xff0c;kun老师的课讲不太行&#xff08;主要原因还是口语太工地&#xff09;&#xff0c;建议大家自己看课件。第二部分是Tutorial&a…

武汉市10月双软认定好处、认定条件及9月认定名单公示

武汉市10月双软认定开始&#xff0c;双软认定有哪些好处&#xff0c;以及需要满足的认定条件简单介绍在下文&#xff0c;9月双软认定的名单已经公示出来了&#xff0c;截取部分放在下文&#xff0c;大家可以参考一下&#xff0c;有需要申报或者了解政策可以直接找我沟通&#x…

Spring Data JDBC如何使用自定义 ID 生成

这是关于如何解决在使用Spring数据JDBC时可能遇到的各种挑战的系列文章的第一篇文章。该系列包括 春季数据 JDBC - 如何使用自定义 ID 生成。&#xff08;本文&#xff09;。 春季数据 JDBC - 如何建立双向关系&#xff1f; 春季数据 JDBC - 如何实现缓存&#xff1f; 春季数…

基于SSM框架的CMS内容管理系统的设计与实现

基于SSM框架的CMS内容管理系统的设计与实现&#xff08;付源码论文&#xff09; 工作任务&#xff1a; 1、通过学习和查找相关的资料&#xff0c;掌握SpringMVC、Spring、Mybatis框架的搭建及开发&#xff1b;通过学习掌握freemarker、BootStrap等前端模板引擎和前端框架技术…