Nginx多虚拟主机配置

最近写公司项目,需要和前端小伙伴对接,但是有时候只是后端的一个bug,也不好意思一直让前端小伙伴帮忙起服务,所以想着直接拿测试包在本地起一个前端环境,这样后续开发比较方便;因为公司项目有好几个,而且要部署到同一台服务器,nginx就成了很好的选择;

1、什么是Nginx?

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。

Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

2011年6月1日,nginx 1.0.4发布。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。

Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。

Nginx代码完全用C语言从头写成。官方数据测试表明能够支持高达 50,000 个并发连接数的响应。

2、Nginx作用?

Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。

正向代理(代理客户端,类似于VPN)
img
反向代理(代理服务器)
img

Nginx提供的负载均衡策略有2种:内置策略和扩展策略。

内置策略为轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的。

轮询
img
加权轮询
img
iphash:对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。
img

动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。

img

3、Nginx的安装

windows下安装

1、下载nginx

http://nginx.org/en/download.html 下载稳定版本。
以nginx/Windows-1.16.1为例,直接下载 nginx-1.16.1.zip。
下载后解压,解压后如下:

img

2、启动nginx

有很多种方法启动nginx

(1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过

(2)打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe ,回车即可

3、检查nginx是否启动成功

直接在浏览器地址栏输入网址 http://localhost:80 回车,出现以下页面说明启动成功!

img

4、配置监听

nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口即可。

img

当我们修改了nginx的配置文件nginx.conf 时,不需要关闭nginx后重新启动nginx,只需要执行命令 nginx -s reload 即可让改动生效

5、关闭nginx

如果使用cmd命令窗口启动nginx, 关闭cmd窗口是不能结束nginx进程的,可使用两种方法关闭nginx

(1)输入nginx命令 nginx -s stop(快速停止nginx) 或 nginx -s quit(完整有序的停止nginx)

(2)使用taskkill taskkill /f /t /im nginx.exe

taskkill /f /t /im nginx.exe 是一个Windows命令行命令,用于强制终止运行中的名为“nginx.exe”的进程及其所有子进程。其中:/f 表示强制结束进程,不会出现确认提示框。
/t 表示终止指定进程及其所有子进程。
/im 表示按进程映像名称终止进程,即根据进程名称指定要终止的进程。这个命令可以在Windows系统下使用,需要在命令行窗口中输入。它的作用是强制终止运行中的nginx进程,适用于nginx进程崩溃或者无法正常退出等情况

linux下安装

1、安装gcc

安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:

yum install gcc-c++

2、PCRE pcre-devel 安装

PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:

yum install -y pcre pcre-devel

3、zlib 安装

zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。

yum install -y zlib zlib-devel

4、OpenSSL 安装
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。

yum install -y openssl openssl-devel

5、下载安装包

手动下载.tar.gz安装包,地址:https://nginx.org/en/download.html

img

下载完毕上传到服务器上 /root

6、解压

tar -zxvf nginx-1.18.0.tar.gzcd nginx-1.18.0

img

7、配置

使用默认配置,在nginx根目录下执行

./configuremakemake install

查找安装路径: whereis nginx

img

4、Nginx常用命令

cd /usr/local/nginx/sbin/./nginx  启动
./nginx -s stop  停止
./nginx -s quit  安全退出
./nginx -s reload  重新加载配置文件
ps aux|grep nginx  查看nginx进程

启动成功访问 服务器ip:80

img

注意:如何连接不上,检查阿里云安全组是否开放端口,或者服务器防火墙是否开放端口!
相关命令:

# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
# 查看防火墙规则
firewall-cmd --list-all
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
# 重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
# 参数解释1、firwall-cmd:是Linux提供的操作firewall的一个工具;2、--permanent:表示设置为持久;3、--add-port:标识添加的端口;

5、Nginx的配置⽂件

Nginx的配置⽂件是 nginx.conf ,⼀般位于 /etc/nginx/nginx.conf 。
可以使⽤ nginx -t 来查看配置⽂件的位置和检查配置⽂件是否正确。

配置⽂件分为以下⼏个部分:

# 全局块
worker_processes 1;
events {# events块
}
http {# http块server {# server块location / {# location块}}
}

5.1、 全局块

全局块是配置⽂件的第⼀个块,也是配置⽂件的主体部分,主要⽤来设置⼀些影响Nginx服务器整体运⾏的配置指令,主要包括配置运⾏Nginx服务器的⽤户(组)、允许⽣成的worker process数、进程PID存放路径、⽇志存放路径和类型以及配置⽂件引⼊等。

# 指定运⾏Nginx服务器的⽤户,只能在全局块配置
# 将user指令注释掉,或者配置成nobody的话所有⽤户都可以运⾏
# user [user] [group]
# user nobody nobody;
user nginx;
# 指定⽣成的worker进程的数量,也可使⽤⾃动模式,只能在全局块配置
worker_processes 1;
# 错误⽇志存放路径和类型
error_log /var/log/nginx/error.log warn;
# 进程PID存放路径
pid /var/run/nginx.pid;

5.2、events块

events {# 指定使⽤哪种⽹络IO模型,只能在events块中进⾏配置# use epoll# 每个worker process允许的最⼤连接数worker_connections 1024;
}

5.3、 http块

http块是配置⽂件的主要部分,包括http全局块和server块。

http {# nginx 可以使⽤include指令引⼊其他配置⽂件include /etc/nginx/mime.types;# 默认类型,如果请求的URL没有包含⽂件类型,会使⽤默认类型default_type application/octet-stream; # 默认类型# 开启⾼效⽂件传输模式sendfile on;# 连接超时时间keepalive_timeout 65;# access_log ⽇志存放路径和类型# 格式为:access_log <path> [format [buffer=size] [gzip[=level]][flush=time] [if=condition]];access_log /var/log/nginx/access.log main;# 定义⽇志格式#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';# 设置sendfile最⼤传输⽚段⼤⼩,默认为0,表示不限制# sendfile_max_chunk 1m;# 每个连接的请求次数# keepalive_requests 100;# keepalive超时时间keepalive_timeout 65;# 开启gzip压缩# gzip on;# 开启gzip压缩的最⼩⽂件⼤⼩# gzip_min_length 1k;# gzip压缩级别,1-9,级别越⾼压缩率越⾼,但是消耗CPU资源也越多# gzip_comp_level 2;# gzip压缩⽂件类型# gzip_types text/plain application/javascript application/xjavascript text/css application/xml text/javascript application/x-httpdphp image/jpeg image/gif image/png;# upstream指令⽤于定义⼀组服务器,⼀般⽤来配置反向代理和负载均衡upstream www.example.com {# ip_hash指令⽤于设置负载均衡的⽅式,ip_hash表示使⽤客户端的IP进⾏hash,这样可以保证同⼀个客户端的请求每次都会分配到同⼀个服务器,解决了session共享的问题ip_hash;# weight ⽤于设置权重,权重越⾼被分配到的⼏率越⼤server 192.168.50.11:80 weight=3;server 192.168.50.12:80;server 192.168.50.13:80;}server {proxy_pass http://www.example.com;# 参考server块的配置}
}

5.4、server块

server块是配置虚拟主机的,⼀个http块可以包含多个server块,每个server块就是⼀个虚拟主机。

server {# 监听IP和端⼝# listen的格式为:# listen [ip]:port [default_server] [ssl] [http2] [spdy][proxy_protocol] [setfib=number] [fastopen=number] [backlog=number];# listen指令⾮常灵活,可以指定多个IP和端⼝,也可以使⽤通配符# 下⾯是⼏个实际的例⼦:# listen 127.0.0.1:80; # 监听来⾃127.0.0.1的80端⼝的请求# listen 80; # 监听来⾃所有IP的80端⼝的请求# listen *:80; # 监听来⾃所有IP的80端⼝的请求,同上# listen 127.0.0.1; # 监听来⾃来⾃127.0.0.1的80端⼝,默认端⼝为80listen 80;# server_name ⽤来指定虚拟主机的域名,可以使⽤精确匹配、通配符匹配和正则匹配等⽅式# server_name example.org www.example.org; # 精确匹配# server_name *.example.org; # 通配符匹配# server_name ~^www\d+\.example\.net$; # 正则匹配server_name localhost;# location块⽤来配置请求的路由,⼀个server块可以包含多个location块,每个location块就是⼀个请求路由# location块的格式是:# location [=|~|~*|^~] /uri/ { ... }# = 表示精确匹配,只有完全匹配上才能⽣效# ~ 表示区分⼤⼩写的正则匹配# ~* 表示不区分⼤⼩写的正则匹配# ^~ 表示普通字符匹配,如果匹配成功,则不再匹配其他location# /uri/ 表示请求的URI,可以是字符串,也可以是正则表达式# { ... } 表示location块的配置内容location / {# root指令⽤于指定请求的根⽬录,可以是绝对路径,也可以是相对路径root /usr/share/nginx/html; # 根⽬录# index指令⽤于指定默认⽂件,如果请求的是⽬录,则会在⽬录下查找默认⽂件index index.html index.htm; # 默认⽂件}# 下⾯是⼀些location的示例:location = / {# 精确匹配请求root /usr/share/nginx/html;index index.html index.htm;}location ^~ /images/ { # 匹配以/images/开头的请求root /usr/share/nginx/html;}location ~* \.(gif|jpg|jpeg)$ {# 匹配以gif、jpg或者jpeg结尾的请求root /usr/share/nginx/html;}location !~ \.(gif|jpg|jpeg)$ {# 不匹配以gif、jpg或者jpeg结尾的请求root /usr/share/nginx/html;}location !~* \.(gif|jpg|jpeg)$ { # 不匹配以gif、jpg或者jpeg结尾的请求root /usr/share/nginx/html;}# error_page ⽤于指定错误⻚⾯,可以指定多个,按照优先级从⾼到低依次查找error_page 500 502 503 504 /50x.html; # 错误⻚⾯location = /50x.html {root /usr/share/nginx/html;}
}

6、实践

反向代理:

	server {listen       9001;server_name  localhost;location ~ /eduservice/ {proxy_pass http://localhost:8001;}location ~ /eduoss/ {proxy_pass http://localhost:8002;}location ~ /eduvod/ {proxy_pass http://localhost:8003;}location ~ /educms/ {proxy_pass http://localhost:8004;}location ~ /edumsm/ {proxy_pass http://localhost:8005;}location ~ /educenter/ {proxy_pass http://localhost:8160;}location ~ /eduorder/ {proxy_pass http://localhost:8007;}location ~ /staservice/ {           proxy_pass http://localhost:8008;}}

多虚拟主机:

  • 一个server块即一个虚拟主机
server {  listen       81;  server_name  192.168.72.49;  #charset koi8-r;  #access_log  logs/host.access.log  main;  location / {  root   html-81;  index  index.html index.htm;  }         }  
server {  listen       82;  server_name  192.168.72.49;  #charset koi8-r;  #access_log  logs/host.access.log  main;  location / {  root   html-82;  index  index.html index.htm;  }          }

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

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

相关文章

CMake HelloWorld

&#xff08;一&#xff09;CMake使用 CMake使用 1.注释# 这是一个CMakeLists.txt文件cmake_minimum_required(VERSION 3.10)2.add_executable 定义工程会生成一个可执行程序add_executable(可执行程序名 源文件名称)# 样式1:add_executable(app add.c div.c main.c mult.c su…

C语言从入门到实战——数据在内存中的存储方式

数据在内存中的存储方式 前言1. 整数在内存中的存储2. 大小端字节序和字节序判断2.1 什么是大小端2.2 为什么有大小端2.3 练习2.3.1 练习12.3.2 练习22.3.3 练习32.3.4 练习42.3.5 练习52.3.6 练习6 3. 浮点数在内存中的存储3.1 练习3.2 浮点数的存储3.2.1 浮点数存的过程3.2.2…

生态茶园建设方案——福建蜂窝物联

一、项目背景 为了进一步提高茶产业集约化、产业化发展水平&#xff0c;充分运用物联网、互联网等高新技术为产业赋能&#xff0c;加速推动安溪茶产业转型升级&#xff0c;县政府决定在安溪县推进“安溪智慧生态茶园项目”&#xff0c;并以茶叶重镇感德镇实施“安溪智慧生态茶园…

EVA-CLIP: Improved Training Techniques for CLIP at Scale论文解读

文章目录 前言一、摘要二、引言三、贡献四、模型方法五、论文链接总结 前言 最近&#xff0c;我一直在搞多模态大模型相关工作&#xff0c;也深知CLIP结构重要性&#xff0c;而EVA-CLIP论文是在CLIP模型基础上进行了一系列trick&#xff0c;实现优越CLIP模型的方法&#xff0c…

SAP SQVI制作报表及SE93创建事务代码

在平时的项目中&#xff0c;财务想查询所有的凭证明细&#xff0c;SAP的查询凭证FB03不能满足需求&#xff0c;所以用SQVI制作一个简易的查询报表。 1、打开SQVI&#xff0c;填写自开发报表的名称“ZFB03”&#xff0c;点击“创建”&#xff0c;输入自开发报表的名称“凭证明细…

【AIGC】Controlnet:基于扩散模型的文生图的可控性

前言 controlnet可以让stable diffusion的生图变得可控。 文章连接&#xff1a;https://arxiv.org/pdf/2302.05543.pdf 摘要 冻结了stable diffusion的预训练模型并重用它的预训练编码层神经网络结构与零初始化卷积层连接&#xff0c;从零开始逐渐增加参数&#xff0c;并确…

Matlab:toposort

语法&#xff1a; n toposort(G) %调用toposort函数&#xff0c;对有向图G进行拓扑排序&#xff0c;并将排序结果存储在变量n中 n toposort(G,Order,algorithm) [n,H] toposort(___) %使用了两个输出参数的形式来调用toposort函数。除了返回排序结果n外&am…

数字集成电路VLSI复习笔记

逻辑门符号 Inverter CMOS NAND Gate CMOS NOR Gate MOS Capacitor nmos cutoff Linear Saturation Channel Charge Carrier velocity nMOS Linear I-V nMOS Saturation I-V Summary nMOS Operation pMOS Operation Inverter Step Response Delay Definitions 3-input NAND Ca…

只不过孤岛罢了:我的2023年总结

2023已悄然过去&#xff0c;还记得跨年夜那天&#xff0c;我突然接到一星期要期末考的消息&#xff0c;我的内心是多么奔溃&#xff0c;先不说一天一门强度如此之高&#xff0c;重要的是矩阵论&#xff0c;工程优化等等科目&#xff0c;还要速成&#xff0c;于是麻木得预习一日…

怎么理解接口幂等,项目中如何保证的接口幂等

都 2024 年了&#xff0c;竟然还有人不知道接口幂等是什么东西。 hi&#xff0c;大家好&#xff0c;我是 浮生 今天正好有空&#xff0c;给大家分享一下 幂等的实现。 什么是幂等&#xff1f; 一、问题解析 简单来说&#xff0c;就是一个接口&#xff0c;使用相同的参数重复执…

2.右值引用和移动语义

文章目录 右值引用和移动语义&&的特性右值引用优化性能&#xff0c;避免深拷贝移动(move )语义forward 完美转发emplace_back 减少内存拷贝和移动unordered container 无序容器map和unordered_map的差别内部实现机理不同优缺点以及适用处 小结优缺点以及适用处 小结 代…

哈希表的实现(1)----除留余数法实现

一&#xff0c;哈希表的介绍 哈希表是一种通过哈希思想实现的一种数据结构。哈希表这种数据结构的特点便是可以通过一个值快速的定位这个值所在的位置实现插入&#xff0c;删除&#xff0c;查找。在这篇博客里面&#xff0c;我们便来实现一个通过除留余数法实现的一个哈希表。 …

IntersectionObserver

IntersectionObserver 这个API主要实现图片懒加载、加载更多等等。 该API作用是观察两个元素之间有没有交叉&#xff0c;有没有重叠 现在要做的是当图片跟视口有交叉的情况下&#xff0c;把data-src的图片路径替换给src属性 //第一个参数是 回调&#xff0c;第二个参数的 配置…

HarmonyOS4.0 系列——06、渲染之条件渲染、循环渲染以及懒加载渲染

HarmonyOS4.0 系列——06、渲染之条件渲染、循环渲染以及懒加载渲染 if/else&#xff1a;条件渲染 ArkTS 提供了渲染控制的能力。条件渲染可根据应用的不同状态&#xff0c;使用 if、else 和 else if 渲染对应状态下的 UI 内容。 写法和 TS 的一样&#xff0c;简单看一下即可…

【数据结构之树和二叉树】

数据结构学习笔记---007 数据结构之树和二叉树概念篇1、树的概念和结构1.1、树的相关概念1.2、树的存储结构 2、二叉树概念及结构2.1、二叉树概念2.2、满二叉树2.3、完全二叉树2.4、满二叉树或完全二叉树的存储形式 3、堆的概念及结构3.1、堆的性质3.2、堆的意义 4、二叉树的存…

python_selenium_安装基础学习

目录 1.为什么使用selenium 2.安装selenium 2.1Chrome浏览器 2.2驱动 2.3下载selenium 2.4测试连接 3.selenium元素定位 3.1根据id来找到对象 3.2根据标签属性的属性值来获取对象 3.3根据xpath语句来获取对象 3.4根据标签的名字获取对象 3.5使用bs4的语法来获取对象…

解惑:测试圈网红工具 Jmeter 到底难在哪里

作为一名测试人员&#xff0c;你是否也曾经遇到过这些问题&#xff1a; 同样的起点&#xff0c;同样的工作时间&#xff0c;为什么别人接那么多项目&#xff0c;你还是在点点点&#xff1b;为什么别人升职了&#xff0c;而你还在原地踏步&#xff1f; 同样的工作内容&#xf…

数据库的数据类型

文章目录 前言一、数据类型数据类型分类数值类型bit类型小数类型floatdecimal 字符串类型charvarcharchar和varchar比较 日期和时间类型enum和set 前言 一、数据类型 数据类型分类 数值类型 下面我们来创建一个表&#xff0c;表中创建一个tinyint类型的数据。当我们不指定tiny…

【贪心】重构字符串

/*** 思路&#xff1a;如果s长度小于2&#xff0c;直接返回s&#xff0c;假设字符串s的长度为n。* n为偶数&#xff0c;如果字符串中的某个字符数量超过 n/2 则肯定会存在相邻的字符。* n为奇数&#xff0c;如果字符串中的某个字符的数量超过 &#xff08;n1&am…

机器学习顶会ICML 2024今日开放投稿,CCF A类,中稿率27.94%(附ICML23杰出论文+18篇高分论文)

ICML 2024今天开放投稿了&#xff01;距离截稿还有24天&#xff0c;想冲ICML的同学速度&#xff01; ICML 全称 International Conference on Machine Learning&#xff0c;由国际机器学习学会&#xff08;IMLS&#xff09;举办&#xff0c;与NIPS一同被认为是人工智能、机器学…