Nginx三种不同类型的虚拟主机(基于域名、IP 和端口)

🏡作者主页:点击! 

Nginx-从零开始的服务器之旅专栏:点击!

🐧Linux高级管理防护和群集专栏:点击!

⏰️创作时间:2025年1月15日13点14分


目录

1. 基于域名的虚拟主机

步骤 1:准备网站根目录

步骤 2:修改 Nginx 配置文件

步骤 3:测试配置并重启 Nginx

步骤 4:访问测试

客户端测试

2. 基于 IP 的虚拟主机

步骤 1:准备网站根目录

步骤 2:修改 Nginx 配置文件

步骤 3:测试配置并重启 Nginx

步骤 4:访问测试

客户端测试

3. 基于端口的虚拟主机

步骤 1:准备网站根目录

步骤 2:修改 Nginx 配置文件

步骤 3:测试配置并重启 Nginx

步骤 4:访问测试

客户端测试

4.总结


Nginx 是一款高性能的 Web 服务器,支持多种虚拟主机配置方式,能够根据域名、IP 或端口区分不同的站点。这种灵活性让 Nginx 成为搭建多站点服务的首选工具。本文将带你一步步实现三种常见的虚拟主机配置方法:基于域名、基于 IP 和基于端口的虚拟主机。无论你是初学者还是有经验的运维人员,这篇教程都能帮助你快速掌握虚拟主机的配置技巧。

以下案例演示 是基于源码包安装的nignx (如果你是rpm包 也差不多 只用把路径改为你nginx的路径即可 其他没什么大的变化,如果你是小白请绕道!)

1. 基于域名的虚拟主机

步骤 1:准备网站根目录

为每个域名创建独立的子目录,并添加测试页面:

[root@localhost ~]# mkdir -p /usr/local/nginx/html/site1
[root@localhost ~]# mkdir -p /usr/local/nginx/html/site2[root@localhost ~]# echo "Welcome to Site 1" > /usr/local/nginx/html/site1/index.html
[root@localhost ~]# echo "Welcome to Site 2" > /usr/local/nginx/html/site2/index.html

步骤 2:修改 Nginx 配置文件

打开 Nginx 的配置文件:

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

http 配置段中添加以下内容:

注释:如果需要两个虚拟主机 只用将再额外添加一个server即可

# 全局配置
user  nobody;
worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;# 基于域名的虚拟主机配置server {listen       80;server_name  www.site1.com;# 网站根目录root   html/site1;index  index.html index.htm;# 日志配置access_log  logs/site1_access.log;error_log   logs/site1_error.log;# 主路径配置location / {try_files $uri $uri/ =404;}# 状态监控location /status {stub_status on;access_log off;allow 192.168.14.112;deny all;}# 错误页面配置error_page   404              /404.html;error_page   500 502 503 504  /50x.html;location = /404.html {root   html/site1;}location = /50x.html {root   html;}# 禁止访问 .ht 文件location ~ /\.ht {deny all;}}server {listen       80;server_name  www.site2.com;# 网站根目录root   html/site2;index  index.html index.htm;# 日志配置access_log  logs/site2_access.log;error_log   logs/site2_error.log;# 主路径配置location / {try_files $uri $uri/ =404;}# 错误页面配置error_page   404              /404.html;error_page   500 502 503 504  /50x.html;location = /404.html {root   html/site2;}location = /50x.html {root   html;}# 禁止访问 .ht 文件location ~ /\.ht {deny all;}}
}

步骤 3:测试配置并重启 Nginx

测试配置文件语法:

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t

重启 Nginx 服务:

[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload

步骤 4:访问测试

在浏览器中访问:

  • http://www.site1.com,应显示 Welcome to Site 1
  • http://www.site2.com,应显示 Welcome to Site 2

客户端测试

修改hosts文件(本地dns解析)

[root@localhost ~]# vim /etc/hosts

2. 基于 IP 的虚拟主机

步骤 1:准备网站根目录

为每个 IP 创建独立的子目录,并添加测试页面:

[root@localhost ~]# mkdir -p /usr/local/nginx/html/ip1
[root@localhost ~]# mkdir -p /usr/local/nginx/html/ip2[root@localhost ~]# echo "Welcome to IP 192.168.14.111" > /usr/local/nginx/html/ip1/index.html
[root@localhost ~]# echo "Welcome to IP 192.168.14.112" > /usr/local/nginx/html/ip2/index.html

步骤 2:修改 Nginx 配置文件

打开 Nginx 的配置文件:

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

http 配置段中添加以下内容:

server {listen 192.168.14.111:80;server_name 192.168.14.111;root html/ip1;  # 使用默认路径的子目录index index.html;location / {try_files $uri $uri/ =404;}# 错误页面error_page 500 502 503 504 /50x.html;location = /50x.html {root html;  # 默认错误页面路径}
}server {listen 192.168.14.112:80;server_name 192.168.14.112;root html/ip2;  # 使用默认路径的子目录index index.html;location / {try_files $uri $uri/ =404;}# 错误页面error_page 500 502 503 504 /50x.html;location = /50x.html {root html;  # 默认错误页面路径}
}

步骤 3:测试配置并重启 Nginx

测试配置文件语法:

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t

重启 Nginx 服务:

[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload

步骤 4:访问测试

在浏览器中访问:

  • http://192.168.14.111,应显示 Welcome to IP 192.168.14.111
  • http://192.168.14.112,应显示 Welcome to IP 192.168.14.112

客户端测试

因为我在虚拟机测试 只有一个网卡 所以我在虚拟一个网卡 这个你可以忽视 看测试结果即可

 ip addr add 192.168.14.110/24 dev ens33

3. 基于端口的虚拟主机

步骤 1:准备网站根目录

为每个端口创建独立的子目录,并添加测试页面:

[root@localhost ~]# mkdir -p /usr/local/nginx/html/port1
[root@localhost ~]# mkdir -p /usr/local/nginx/html/port2[root@localhost ~]# echo "Welcome to Port 8080" > /usr/local/nginx/html/port1/index.html
[root@localhost ~]# echo "Welcome to Port 9090" > /usr/local/nginx/html/port2/index.html

步骤 2:修改 Nginx 配置文件

打开 Nginx 的配置文件:

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

http 配置段中添加以下内容:

server {listen 8080;server_name localhost;root html/port1;  # 使用默认路径的子目录index index.html;location / {try_files $uri $uri/ =404;}# 错误页面error_page 500 502 503 504 /50x.html;location = /50x.html {root html;  # 默认错误页面路径}
}server {listen 9090;server_name localhost;root html/port2;  # 使用默认路径的子目录index index.html;location / {try_files $uri $uri/ =404;}# 错误页面error_page 500 502 503 504 /50x.html;location = /50x.html {root html;  # 默认错误页面路径}
}

步骤 3:测试配置并重启 Nginx

测试配置文件语法:

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t

重启 Nginx 服务:

[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload

步骤 4:访问测试

在浏览器中访问:

  • http://192.168.14.111:8080,应显示 Welcome to Port 8080
  • http://192.168.14.111:9090,应显示 Welcome to Port 9090

客户端测试

4.总结

通过本文的详细步骤,我们成功实现了基于域名、IP 和端口的虚拟主机配置。Nginx 的灵活性和高性能使其能够轻松应对多站点服务的需求。这些配置方法不仅适用于日常开发和测试环境,也能在生产环境中提供稳定可靠的服务。如果你对 Nginx 的配置还有疑问或其他需求,欢迎留言交流,让我们共同学习、共同进步!

成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"

"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"

神秘泣男子

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

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

相关文章

解析OVN架构及其在OpenStack中的集成

引言 随着云计算技术的发展,虚拟化网络成为云平台不可或缺的一部分。为了更好地管理和控制虚拟网络,Open Virtual Network (OVN) 应运而生。作为Open vSwitch (OVS) 的扩展,OVN 提供了对虚拟网络抽象的支持,使得大规模部署和管理…

C#异步和多线程,Thread,Task和async/await关键字--12

目录 一.多线程和异步的区别 1.多线程 2.异步编程 多线程和异步的区别 二.Thread,Task和async/await关键字的区别 1.Thread 2.Task 3.async/await 三.Thread,Task和async/await关键字的详细对比 1.Thread和Task的详细对比 2.Task 与 async/await 的配合使用 3. asy…

doris:导入概览

Apache Doris 提供了多种导入和集成数据的方法,您可以使用合适的导入方式从各种源将数据导入到数据库中。Apache Doris 提供的数据导入方式可以分为四类: 实时写入:应用程序通过 HTTP 或者 JDBC 实时写入数据到 Doris 表中,适用于…

【Flink系列】9. Flink容错机制

9. 容错机制 在Flink中,有一套完整的容错机制来保证故障后的恢复,其中最重要的就是检查点。 9.1 检查点(Checkpoint) 9.1.1 检查点的保存 1)周期性的触发保存 “随时存档”确实恢复起来方便,可是需要我…

《Keras 3 在 TPU 上的肺炎分类》

Keras 3 在 TPU 上的肺炎分类 作者:Amy MiHyun Jang创建日期:2020/07/28最后修改时间:2024/02/12描述:TPU 上的医学图像分类。 (i) 此示例使用 Keras 3 在 Colab 中查看 GitHub 源 简介 设置 本教程将介…

Axios 封装:处理重复调用与内容覆盖问题

问题描述&背景 下拉选择框,支持搜索,搜索时携带参数调用接口并更新下拉选项下拉选择连续进行多次搜索,先请求但响应时间长的返回值会覆盖后请求但响应时间短的举例: 搜索后先清空选项,再输入内容进行搜索。清空后…

openssl s_server源码剥离

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

51单片机 DS18B20温度储传感器

DS18B20温度传感器 64-BITROM:作为器件地址,用于总线通信的寻址,是唯一的,不可更改 SCRATCHPAD(暂存器):用于总线的数据交互 EEPROM:用于保存温度触发阈值和配置参数 暂存器 单总线…

如何学习Transformer架构

Transformer架构自提出以来,在自然语言处理领域引发了革命性的变化。作为一种基于注意力机制的模型,Transformer解决了传统序列模型在并行化和长距离依赖方面的局限性。本文将探讨Transformer论文《Attention is All You Need》与Hugging Face Transform…

如何选择合适的服务器?服务器租赁市场趋势分析

服务器租赁市场概览 服务器租赁 market可以分为两种类型:按小时、按月和按年,每种模式都有其特点和适用场景,按小时租赁是最经济实惠的选择,适用于短期需求;按月租赁则适合中长期使用;而按年租赁则是最灵活…

[操作系统] 深入理解操作系统的概念及定位

概念 任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)。 其核心功能如图片所示,包括: 内核 (Kernel): 内核是操作系统的核心部分,被认为是狭义上的操作系统,直接与硬件打交道。负责进程管理、内…

Java并发编程——线程池(基础,使用,拒绝策略,命名,提交方式,状态)

我是一个计算机专业研0的学生卡蒙Camel🐫🐫🐫(刚保研) 记录每天学习过程(主要学习Java、python、人工智能),总结知识点(内容来自:自我总结网上借鉴&#xff0…

nginx 配置代理,根据 不同的请求头进行转发至不同的代理

解决场景:下载发票的版式文件,第三方返回的是url链接地址,但是服务是部署在内网环境,无法访问互联网进行下载。此时需要进行走反向代理出去,如果按照已有套路,就是根据不同的访问前缀,跳转不同的…

设计一个流程来生成测试模型安全性的问题以及验证模型是否安全

要使用 Ollama 运行 llama3.3:70b 模型,并设计一个流程来生成测试模型安全性的问题以及验证模型是否安全,可以按照以下步骤进行设计和实现。整个过程包括环境配置、设计安全测试提示词、执行测试以及分析结果。以下是详细的步骤和指导: 1. 环…

iOS - TLS(线程本地存储)

从源码中,详细总结 TLS (Thread Local Storage) 的实现: 1. TLS 基本结构 // TLS 的基本结构 struct tls_data {pthread_key_t key; // 线程本地存储的键void (*destructor)(void *); // 清理函数 };// 自动释放池的 TLS class Autorelease…

docker在不删除容器的情况下修改端口映射

注意:必须先停止docker服务!!!! 1) 停止容器 2) 停止docker服务(systemctl stop docker) 3) 修改这个容器的hostconfig.json和config.v2.json文件中的端口 先查看容器id docker inspect jenkins 进入该目录 hostcon…

【js进阶】设计模式之单例模式的几种声明方式

单例模式&#xff0c;简言之就是一个类无论实例化多少次&#xff0c;最终都是同一个对象 原生js的几个辅助方式的实现 手写forEch,map,filter Array.prototype.MyForEach function (callback) {for (let i 0; i < this.length; i) {callback(this[i], i, this);} };con…

专题 - STM32

基础 基础知识 STM所有产品线&#xff08;列举型号&#xff09;&#xff1a; STM产品的3内核架构&#xff08;列举ARM芯片架构&#xff09;&#xff1a; STM32的3开发方式&#xff1a; STM32的5开发工具和套件&#xff1a; 若要在电脑上直接硬件级调试STM32设备&#xff0c;则…

-bash: /java: cannot execute binary file

在linux安装jdk报错 -bash: /java: cannot execute binary file 原因是jdk安装包和linux的不一致 程序员的面试宝典&#xff0c;一个免费的刷题平台

【MySQL】使用C语言链接

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;MySQL 目录 一&#xff1a;&#x1f525; MySQL connect &#x1f98b; Connector / C 使用&#x1f98b; mysql 接口介绍&#x1f98b; 完整代码样例 二&#xff1a;&#x1f525; 共勉 一&#…