Apache和Nginx实现虚拟主机的3种方式小结
作者:未知百分百
首先介绍一下Apache和nginx:
Apache(Apache HTTP Server):是一个模型化的服务器,可以运行在几乎所有的服务器上。其属于应用服务器
特点:支持模块多、性能稳定、Apache本身是静态解析,适合静态HTML、图片,但是可以通过扩展脚本、模块等支持动态页面等
Nginx:是俄罗斯人编写的十分轻量级的HTTP服务器,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器,
特点:占有内存少,并发能力强、抑郁开发、部署方便。Niginx支持多语言通用服务器
Nginx和Apache的不同之处:
- Nginx配置简介,Apache较为复杂;
- Nginx静态处理性能比Apache高很多
- Apache是同步多进程模型,一个连接诶对应一个进程;Nginx是异步的,多个连接可以对一个进程
- Nginx处理静态文件好,耗费内存少;动态请求Apache比较擅长,Nginx更适合去做静态和反向
- 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环境:
安装所有需要的软件包:
yum install epel-release.noarch yum install nginx mariadb-server.x86_64 mariadb php php-fpm.x86_64 php-mysql -y
关闭selinux:
setenforce 0
启动:
systemctl start nginx systemctl start php-fpm.service
Apache实现:
方法1:使用不同的ip来实现
(1)首先创建一个目录:
mkdir /www/
(2)创建日志存放的目录:
mkdir /www/logs
(3)为两个目录下的index.html写入内容:
echo "Hello Apache" > /www/index.html
(4)为网卡ens160增加一个ip地址:
nmcli connection modify ens33 +ipv4.addresses 192.168.159.250/24 ipv4.method manual
(5)激活该地址:
nmcli con up ens33
(6)安装离线帮助包:
dnf install -y httpd-manual
(7)重启httpd服务:
systemctl restart httpd
(8)在浏览器中打开帮助手册:(192.168.159.200/mantal Apache HTTP Server Version 2.4 Documentation - Apache HTTP Server Version 2.4)
(9)进入配置路径:
cd /etc/httpd/conf.d/
(10) vim VirtualHost.conf 将以下内容写入:
<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)检查一下是否有语法错误
httpd -t
(12)重启httpd:
systemctl restart httpd
注:如果这里不成功很有可能和selinux有关
关闭selinux:
setenforce 0
(13)使用浏览器测试:
可以看到,我们成功的实现了不同的ip地址,访问同一个资源
方法2:使用相同的ip,不同的端口来实现
(1)首先将上面添加的ip删除:
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写入以下内容:
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:
systemctl restart httpd
(5)防火墙放行81和82端口:
firewall-cmd --permanent --add-port=81-82/tcpsuccess firewall-cmd --reload 让防火墙立即生效success
(6)使用浏览器进行测试:
方法3:使用相同的ip,相同的端口,不同的主机名(域名)
(1)将配置文件修改为:
<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)重启:
systemctl restart httpd
(3)在windowC:\Windows\System32\drivers\etc的路径中的hosts中添加对应关系:
192.168.159.200 www1.example.com www2.example.com
测试:
Nginx实现:
方法1:使用不同的ip来实现
为当前网卡增加一个ip
nmcli con modify ens33 +ipv4.addresses 192.168.159.222/24 nmcli con up ens33
注:这里将ip地址修改为自己主机一个网段的ip地址
创建文件夹:
mkdir /www/
为主页面中写入内容:vim index.html
"hello 我的路径是www/index.html"
为这个页面创建日志文件,后面配置虚拟主机会用到
mkdir /www/logs
然后修改配置文件:
vim /etc/nginx/conf.d/test.conf
将以下内容写入:
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删除掉:
nmcli con modify ens33 -ipv4.addresses 192.168.159.201 nmcli con up ens33
修改虚拟主机为:
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实现时使用了方形端口,那我这里直接关闭防火墙:
systemctl stop firewall.service
重启nginx服务:
systemctl restart nginx.service
测试:
方法3:使用相同的ip,相同的端口,不同的主机名(域名)
修改配置文件为:
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中增加对应关系
192.168.159.200 www1.example.com 192.168.159.200 www2.example.com
测试:
到这里Nginx和Apache三种虚拟主机的配置就已经全部完成了!
到此这篇关于Apache和Nginx实现虚拟主机的3种方式的文章就介绍到这了,更多相关Apache和Nginx虚拟主机内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!