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端⼝,默认端⼝为80
     listen 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;  
        }          
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

22款奔驰C260L升级ACC自适应巡航 解放双脚 出行更加安全

有的时候你是否厌倦了不停的刹车、加油&#xff1f;是不是讨厌急刹车&#xff0c;为掌握不好车距而烦恼&#xff1f; 如果是这样&#xff0c;那么就升级奔驰原厂ACC自适应式巡航控制系统&#xff0c;带排队自动辅助和行车距离警报功能&#xff0c;感受现代科技带给你的舒适安全…

<软考高项备考>《论文专题 - 63 质量管理(2) 》

2 过程1-规划质量管理 2.1 问题 4W1H过程做什么识别项目及其可交付成果的质量要求、标准&#xff0c;并书面描述项目将如何证明符合质量要求、标准的过程&#xff1b;作用&#xff1a;为在整个项目期间如何管理和核实质量提供指南和方向为什么做1、识别项目/产品质量要求和标…

Github项目推荐-Insomnia

项目地址 GitHub地址&#xff1a;GitHub - Kong/insomnia 官网&#xff1a;The Collaborative API Development Platform - Insomnia 项目简述 想必大家都知道PostMan吧。Insomnia可以说是PostMan的开源平替。页面ui很不错&#xff0c;功能强大&#xff0c;使用也比较方便。…

【ChatGPT-Share,国内可用】GPTS商店大更新:一探前沿科技的魅力!

使用地址&#xff1a;https://hello.zhangsan.cloud/list GPTS商店预览,王炸更新 精选应用&#xff1a; 系统内置应用&#xff1a; 绘画应用&#xff1a; 写作应用&#xff1a; 高效工具应用&#xff1a; 学术搜索和分析应用&#xff1a; 编程应用&#xff1a; 教育应…

开源项目CuteSqlite开发笔记(七):CuteSqlite释放BETA版本啦

经过大半年的开发&#xff0c;CuteSqlite程序代码不知不觉来到了6万行&#xff0c;有效行数4万行&#xff0c;CuteSqlite开发完成了一个小版本&#xff0c;进入下一个阶段&#xff0c;并于2024元旦释放BETA版本&#xff0c;有兴趣的朋友可以下载试用。 GitHub下载https://gith…

基于Docker Compose单机实现多级缓存架构2024

文章目录 一、环境参考二、专栏简介三、扩展 一、环境参考 NameVersionDocker Desktop for Windows4.23.0Openjdk8MySQL8.2.0Redis7.2Canal1.1.7OpenResty1.21.4.3-3-jammy-amd64Lua-Caffeine- 二、专栏简介 多级缓存实现过程比较长&#xff0c;将拆分为多个文章分步讲述。如…

【算法】信使(最短路问题)

题目 战争时期&#xff0c;前线有 n 个哨所&#xff0c;每个哨所可能会与其他若干个哨所之间有通信联系。 信使负责在哨所之间传递信息&#xff0c;当然&#xff0c;这是要花费一定时间的&#xff08;以天为单位&#xff09;。 指挥部设在第一个哨所。 当指挥部下达一个命令…

低维度向量的 Householder 反射变换 matlab 图示

1, 算法原理 设th 是一个弧度值&#xff0c; 令 Q | cos(th) sin(th) | | sin(th) -cos(th) | S span{ | cos(th/2.0) | } | sin(th/2.0) | x (x1, x2) 是一个平面上的二维向量 计算 y Qx Qx 则&#xff0c;y 是 x 通过有 S 定…

基于STM32F103和ESP8266的Wi-Fi模块驱动程序设计与优化

基于STM32F103和ESP8266的Wi-Fi模块驱动程序设计和优化是一个重要的任务&#xff0c;它将使STM32F103微控制器能够与ESP8266模块进行通信并实现无线网络连接。在本文中&#xff0c;我们将介绍如何设计和优化这样的驱动程序&#xff0c;并提供相关的代码示例。 1. 系统概述 Wi…

Ubuntu root 远程登录失败

背景&#xff1a;设置了两个系统用户&#xff1a;root、test&#xff1b;test可以登录&#xff0c;可以使用su 命令切换root用户登录成功&#xff1b; 但是直接用root登录&#xff0c;会报错。 查看登录日志的方法&#xff1a; 需要两个远程窗口&#xff0c;在第一个远程窗口…

案例103:基于微信小程序的移动网赚项目设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder …

OCR字符识别:开始批量识别身份证信息

身份证信息批量识别OCR是一项解决方案&#xff0c;它能够将身份证照片打包成zip格式或通过URL地址进行提交&#xff0c;并能够识别照片中的文本信息。最终&#xff0c;用户可以将识别结果生成为excel文件进行下载。 API接口功能&#xff1a; 1. 批量识别&#xff1a;支持将多…

SmartX 超融合和分布式存储支持哪些信创硬件?如何选型配置?

为了推动 IT 基础架构国产化转型&#xff0c;不少用户都使用 SmartX 超融合和分布式存储构建信创云基础设施。其中&#xff0c;信创硬件的选型与配置往往是用户在规划与部署环节关注的重点&#xff1a;国产 CPU/存储怎么选&#xff1f;哪个系列/型号的性价比最高&#xff1f;如…

rpb/rpc文件说明与matlab读取

什么是rpb/rpc文件&#xff1f; rpb文件是用来存储用于遥感数据几何校正的RPC&#xff08;Rational Polynomial Coefficients &#xff09;模型的文件。类似的还有RPC文件&#xff0c;rpb与rpc文件只是格式不同&#xff0c;但包含的信息一致。其用于从图像坐标转换到地理坐标&a…

DartSDK下载

下载DartSDK(具有开发Dart命令行、服务器和非FlutterWeb应用程序所需的库和命令行工具(底层支持作用系统库)) 1.Homebrew环境 //brew --version 2.brew tap dart-lang/dart 3.brew install dart 修改host 下载成功 描述信息查看 AndroidStudio 引入配置 备注&#xff1a; …

x-cmd pkg | czg - git commit 智能生成工具

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 czg 源于 commitizen/cz-cli 交互插件中 cz-git 的延伸项目&#xff0c;重新使用 TypeScript 编写的零依赖独立的 Node.js 命令行工具。旨在使用交互友好的方式&#xff0c;辅助用户生成规范的 git commit message 约…

红队专题-Golang工具ChYing

Golang工具ChYing 招募六边形战士队员原chying工具代码分析并发访问控制并发 原子 写入读取 通道嵌套映射结构初始化启动代理服务器重启代理服务器 招募六边形战士队员 一起学习 代码审计、安全开发、web攻防、逆向等。。。 私信联系 原chying工具代码分析 前有 Chying 后有…

如何设置gitlab.rb 将所有数据运行目录放置到指定目录

如何设置gitlab.rb 将所有数据运行目录放置到指定目录 在GitLab中&#xff0c;要将所有数据目录&#xff08;包括仓库、日志和其他配置文件&#xff09;移动到一个自定义位置&#xff0c;你需要编辑GitLab的配置文件 /etc/gitlab/gitlab.rb。这里主要关注的是 git_data_dir 配置…

【Git】的工作流程简介

目录 Git的工作区域Git的基本流程 1.将工作区的代码添加到暂存区2.将暂存区的文件提交到本地仓库3.将暂存区的文件提交到远程仓库 Git的工作区域 Git的基本流程 图形化方式操作 命令行模式&#xff08;Linux系统常用&#xff09;操作 1.将工作区的代码添加到暂存区 查看文件状…

一、docker的安装与踩坑

目录 一、安装docker&#xff08;centos7安装docker&#xff09;1.安装环境前期准备2.参考官网安装前准备3.参考官网安装步骤开始安装docker4.运行首个容器 二、安装一些软件的踩坑1.启动docker踩坑2.安装mysql踩坑3.罕见问题 三、关于我的虚拟机 一、安装docker&#xff08;ce…