Apache和Nginx实现虚拟主机的3种方式

目录

首先介绍一下Apache和nginx:

Nginx和Apache的不同之处:

虚拟主机

准备工作

Apache实现:

方法1:使用不同的ip来实现

方法2:使用相同的ip,不同的端口来实现

方法3:使用相同的ip,相同的端口,不同的主机名(域名)

Nginx实现:

方法1:使用不同的ip来实现

方法2:使用相同的ip,不同的端口来实现

方法3:使用相同的ip,相同的端口,不同的主机名(域名)


首先介绍一下Apache和nginx:

Apache(Apache HTTP Server):是一个模型化的服务器,可以运行在几乎所有的服务器上。其属于应用服务器

特点:支持模块多、性能稳定、Apache本身是静态解析,适合静态HTML、图片,但是可以通过扩展脚本、模块等支持动态页面等

Nginx:是俄罗斯人编写的十分轻量级的HTTP服务器,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器,

特点:占有内存少,并发能力强、抑郁开发、部署方便。Niginx支持多语言通用服务器

Nginx和Apache的不同之处:

  1. Nginx配置简介,Apache较为复杂;
  2. Nginx静态处理性能比Apache高很多
  3. Apache是同步多进程模型,一个连接诶对应一个进程;Nginx是异步的,多个连接可以对一个进程
  4. Nginx处理静态文件好,耗费内存少;动态请求Apache比较擅长,Nginx更适合去做静态和反向
  5. Nginx适合做前端服务器,负载性能很好;Nginx本身就是一个反向代理服务器,且支持负载均衡

虚拟主机

解决的问题:解决一台web服务器运行多个web应用

准备工作

首先本次测试环境运行在虚拟机中:使用center os 7

然后进入配置文件中:

复制代码
vim /etc/httpd/conf/httpd.conf 

找到上图的位置

1.将ServerName前的注释删除,即开启了www.example.com这个域名的访问

2.将Require all denied修改为 granted ,即允许所有的请求

3.找到这里增加一条;作用是配置php的配置环境让php可以正常使用

4.找到这里在后面增加一个 index.php,即增加了一个php页面

配置完成后重启http服务:

复制代码
systemctl start  httpd

配置LNMP环境:

安装所有需要的软件包:

bash 复制代码
yum install epel-release.noarch 
yum install nginx mariadb-server.x86_64  mariadb php php-fpm.x86_64 php-mysql -y

关闭selinux:

bash 复制代码
setenforce 0

启动:

bash 复制代码
systemctl start nginx
systemctl start php-fpm.service 

Apache实现:

方法1:使用不同的ip来实现

(1)首先创建一个目录:

bash 复制代码
 mkdir /www/

(2)创建日志存放的目录:

bash 复制代码
 mkdir /www/logs

(3)为两个目录下的index.html写入内容:

bash 复制代码
echo "Hello Apache" > /www/index.html

(4)为网卡ens160增加一个ip地址:

bash 复制代码
nmcli connection modify ens33 +ipv4.addresses 192.168.159.250/24 ipv4.method manual

(5)激活该地址:

bash 复制代码
nmcli con up ens33

(6)安装离线帮助包:

bash 复制代码
dnf install -y httpd-manual

(7)重启httpd服务:

bash 复制代码
systemctl restart httpd

(8)在浏览器中打开帮助手册:(192.168.159.200/mantal Apache HTTP Server Version 2.4 Documentation - Apache HTTP Server Version 2.4

(9)进入配置路径:

bash 复制代码
cd /etc/httpd/conf.d/

(10) vim VirtualHost.conf 将以下内容写入:

bash 复制代码
<Directory "/www/">
    Options Indexes FollowSymLinks
    AllowOverride None            
                      
    Require all granted           
</Directory>          
<VirtualHost 192.168.159.200:80>  
    DocumentRoot "/www"      
    ServerName www1.example.com   
    ErrorLog "/www/logs/error_log"
    CustomLog "/www/logs/access_log" combined
</VirtualHost>        
<VirtualHost 192.168.159.250:80>                  
    DocumentRoot "/www"                      
    ServerName www2.example.com                   
    ErrorLog "/www/logs/error_log"           
    CustomLog "/www/logs/access_log" combined
</VirtualHost>

(11)检查一下是否有语法错误

bash 复制代码
httpd -t

(12)重启httpd:

bash 复制代码
systemctl restart httpd

注:如果这里不成功很有可能和selinux有关

关闭selinux:

bash 复制代码
setenforce 0

(13)使用浏览器测试:

可以看到,我们成功的实现了不同的ip地址,访问同一个资源

方法2:使用相同的ip,不同的端口来实现

(1)首先将上面添加的ip删除:

bash 复制代码
nmcli connection modify ens33 -ipv4.addresses 192.168.159.250/24 ipv4.method manual
nmcli con up ens33

(3)vim /etc/http/conf.d/VirtualHost写入以下内容:

bash 复制代码
Listen 81                      
Listen 82                      
<Directory "/www/">            
Options Indexes FollowSymLinks 
AllowOverride None             
Require all granted            
</Directory>                   
<VirtualHost 192.168.159.200:81>
    DocumentRoot "/www"   
    ServerName www1.example.com
    ErrorLog "/www/logs/error_log"
    CustomLog "/www/logs/access_log" combined
</VirtualHost>                 
<VirtualHost 192.168.159.200:82> 
    DocumentRoot "/www"     
    ServerName www2.example.com  
    ErrorLog "/www/logs/error_log"
    CustomLog "/www/logs/access_log" combined
</VirtualHost>

(4)重启httpd:

bash 复制代码
systemctl restart httpd

(5)防火墙放行81和82端口:

bash 复制代码
 firewall-cmd --permanent --add-port=81-82/tcpsuccess
firewall-cmd --reload 让防火墙立即生效success

(6)使用浏览器进行测试:

方法3:使用相同的ip,相同的端口,不同的主机名(域名)

(1)将配置文件修改为:

bash 复制代码
<Directory "/www/">       
Options Indexes FollowSymLinks
AllowOverride None        
Require all granted       
</Directory>              
<VirtualHost 192.168.159.200:80>
    DocumentRoot "/www"
    ServerName www1.example.com
    ErrorLog "/www/logs/error_log"
    CustomLog "/www/logs/access_log" combined
</VirtualHost>            
<VirtualHost 192.168.159.200:80>
    DocumentRoot "/www"    
    ServerName www2.example.com 
    ErrorLog "/www/logs/error_log"
    CustomLog "/www/logs/access_log" combined
</VirtualHost>

(2)重启:

bash 复制代码
 systemctl restart httpd

(3)在windowC:\Windows\System32\drivers\etc的路径中的hosts中添加对应关系:

bash 复制代码
192.168.159.200 www1.example.com www2.example.com

测试:

Nginx实现:

方法1:使用不同的ip来实现

为当前网卡增加一个ip

bash 复制代码
nmcli  con modify  ens33 +ipv4.addresses 192.168.159.222/24
nmcli con up ens33 

注:这里将ip地址修改为自己主机一个网段的ip地址

创建文件夹:

bash 复制代码
mkdir /www/

为主页面中写入内容:vim index.html

bash 复制代码
"hello 我的路径是www/index.html"

为这个页面创建日志文件,后面配置虚拟主机会用到

bash 复制代码
mkdir /www/logs

然后修改配置文件:

bash 复制代码
vim  /etc/nginx/conf.d/test.conf

将以下内容写入:

bash 复制代码
server {
        listen 80;
        server_name 192.168.159.200;
        charset utf-8;
        index index.html;
        root /www/;
}
server {
        listen 80;
        server_name 192.168.159.201;
        charset utf-8;
        index index.html;
        root /www/;}

测试:

根据结果我们可以看到,使用不容的ip地址访都问到了我们写的主页面

方法2:使用相同的ip,不同的端口来实现

这里首先将之前新增加的ip删除掉:

bash 复制代码
nmcli  con modify  ens33 -ipv4.addresses 192.168.159.201
nmcli con up ens33 

修改虚拟主机为:

bash 复制代码
server {
        listen 81;
        server_name 192.168.159.200;
        charset utf-8;
        index index.html;
        root /www/web1;
}
server {
        listen 82;
        server_name 192.168.159.200;
        charset utf-8;
        index index.html;
        root /www/web2;}

防火墙放行tcp81/82端口,或者关闭防火墙

上面的Apache实现时使用了方形端口,那我这里直接关闭防火墙:

bash 复制代码
systemctl stop firewall.service

重启nginx服务:

bash 复制代码
systemctl restart nginx.service

测试:

方法3:使用相同的ip,相同的端口,不同的主机名(域名)

修改配置文件为:

bash 复制代码
server {
        listen 80;
        server_name www1.example.com;
        charset utf-8;
        index index.html;
        root /www/web1;
}
server {
        listen 80;
        server_name www2.example.com;
        charset utf-8;
        index index.html;
        root /www/web2;}

在window主机中的host中增加对应关系

bash 复制代码
192.168.159.200 www1.example.com 
192.168.159.200 www2.example.com

测试:

到这里Nginx和Apache三种虚拟主机的配置就已经全部完成了!

相关推荐
大白菜13242 小时前
进程的信号
linux
XH-hui2 小时前
【打靶日记】群内靶机Secure
linux·网络安全
Shingmc32 小时前
【Linux】进程控制
linux·服务器·算法
视觉装置在笑7133 小时前
Shell 变量基础与进阶知识
linux·运维
悟能不能悟3 小时前
apache配置反向代理
apache
Web极客码3 小时前
如何通过命令行工具检查 Linux 版本信息
linux·运维·服务器
Lynnxiaowen4 小时前
今天我们继续学习Kubernetes内容pod资源对象
运维·学习·容器·kubernetes·云计算
欢鸽儿4 小时前
Vitis】Linux 下彻底清除启动界面 Recent Workspaces 历史路径
linux·嵌入式硬件·fpga
繁华似锦respect4 小时前
C++ 智能指针底层实现深度解析
linux·开发语言·c++·设计模式·代理模式
远程软件小帮手4 小时前
云电脑挂机功能上线!边上班摸鱼边游戏多开教程
运维·服务器