任何一个域名指向这台服务器,只要是没有对应的虚拟主机,就会由这个默认虚拟主机来处理。先编辑一下配置文件httpd.confjavascript
vim /usr/local/apache2.4/conf/httpd.conf 搜索httpd-vhost找到这行吧行首的#号删除
保存主配置文件,而后编辑虚拟主机配置文件:php
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf // 这个配置文件就是虚拟主机配置文件了,后面的操做都是在这个里面完成的。
这里面每个段,都是一个主机css
<VirtualHost *:80> ServerAdmin webmaster@dummy-host.example.com DocumentRoot "/usr/local/apache2.4/docs/dummy-host.example.com" ServerName dummy-host.example.com ServerAlias www.dummy-host.example.com ErrorLog "logs/dummy-host.example.com-error_log" CustomLog "logs/dummy-host.example.com-access_log" common </VirtualHost> <VirtualHost *:80> ServerAdmin webmaster@dummy-host2.example.com DocumentRoot "/usr/local/apache2.4/docs/dummy-host2.example.com" ServerName dummy-host2.example.com ErrorLog "logs/dummy-host2.example.com-error_log" CustomLog "logs/dummy-host2.example.com-access_log" common </VirtualHost>
<VirtualHost *:80> ServerAdmin webmaster@dummy-host2.example.com //定义用户的邮箱,没用能够直接删掉 DocumentRoot "/data/wwwroot/abc.com" //定义网站的根目录 ServerName abc.com ErrorLog "logs/abc-host2.example.com-error_log" //指定错误日志 CustomLog "logs/abc-host2.example.com-access_log" common //指定访问日志 </VirtualHost>
建立一个网站根目录[root@aminglinux-01 ~]# mkdir /data/wwwroot/abc.comhtml
定义一个phpjava
[root@aminglinux-01 ~]# vim /data/wwwroot/abc.com/index.php <?php echo "abc.com"; ?> ~
curl -x192.168.245.128:80 abc.comlinux
[root@aminglinux-01 ~]# curl -x192.168.245.128:80 abc.com abc.com[root@aminglinux-01 ~]#
不生效的话 能够试着从新加载配置文件/usr/local/apache2.4/bin/apachectl gracefulweb
curl -x/--proxy 在给定的端口上使用HTTP代理apache
虚拟主机配置文件一但生效,其余配置就会失效。vim
所谓默认主机,不管任何域名解析到这个ip上,都会访问默认虚拟主机。浏览器
<VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com" ServerName www.123.com <Directory /data/wwwroot/www.123.com> //指定认证的目录 AllowOverride AuthConfig //这个至关于打开认证的开关 AuthName "123.com user auth" //自定义认证的名字,做用不大 AuthType Basic //认证的类型,通常为Basic,其余类型阿铭没用过 AuthUserFile /data/.htpasswd //指定密码文件所在位置 require valid-user //指定须要认证的用户为所有可用用户
改为:
<VirtualHost *:80> DocumentRoot "/data/wwwroot/abc.com" ServerName abc.com ServerAlias www.abc.com <Directory /data/wwwroot/abc.com> AllowOverride AuthConfig AuthName "abc.com user auth" AuthType Basic AuthUserFile /data/.htpasswd require valid-user </Directory> ErrorLog "logs/abc.com-error_log" CustomLog "logs/abc.com-access_log" common </VirtualHost>
[root@aminglinux-01 ~]# /usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd aming New password: Re-type new password: Adding password for user aming [root@aminglinux-01 ~]#
-c 建立
htpasswd第一次建立用户要用到-c 参数 第2次就不能加-c了,不然会覆盖前面已创建好的用户
-m 指定密码加密类型
[root@aminglinux-01 ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@aminglinux-01 ~]# /usr/local/apache2.4/bin/apachectl graceful [root@aminglinux-01 ~]#
curl -x192.168.245.128:80 abc.com
[root@aminglinux-01 ~]# curl -x192.168.245.128:80 abc.com <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>401 Unauthorized</title> </head><body> <h1>Unauthorized</h1> <p>This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.</p> </body></html>
出现401报错,从浏览器输入网址,提示须要输入用户名密码
或者curl -x192.168.245.128:80 -uaming:123456 abc.com -I 出现状态码 200
[root@aminglinux-01 ~]# curl -x192.168.245.128:80 -uaming:123456 abc.com -I HTTP/1.1 200 OK Date: Mon, 09 Oct 2017 10:16:45 GMT Server: Apache/2.4.27 (Unix) PHP/5.6.30 X-Powered-By: PHP/5.6.30 Content-Type: text/html; charset=UTF-8
这样就成功了
<VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com" ServerName www.123.com <FilesMatch admin.php> AllowOverride AuthConfig AuthName "123.com user auth" AuthType Basic AuthUserFile /data/.htpasswd require valid-user </FilesMatch> </VirtualHost>
惟一的区别就是<FilesMatch admin.php> ,指定的是单个文件才会出现认证。而以前是用Directory指定整个目录
FilesMatch后面的文件是相对路径,而Files、Directory则使用绝对路径
<VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com" ServerName www.123.com ServerAlias 123.com <IfModule mod_rewrite.c> //须要mod_rewrite模块支持 RewriteEngine on //打开rewrite功能 RewriteCond %{HTTP_HOST} !^www.123.com$ //定义rewrite的条件,主机名(域名)不是www.123.com知足条件 RewriteRule ^/(.*)$ http://www.123.com/$1 [R=301,L] //定义rewrite规则,当知足上面的条件时,这条规则才会执行 </IfModule> </VirtualHost> /usr/local/apache2/bin/apachectl -M|grep -i rewrite //若无该模块,须要编辑配置文件httpd.conf,删除rewrite_module (shared) 前面的#
实际写成这样子:
<VirtualHost *:80> DocumentRoot "/data/wwwroot/abc.com" ServerName abc.com ServerAlias abc.com www.example.com 2111.com.cn #<Directory /data/wwwroot/abc.com> # AllowOverride AuthConfig # AuthName "abc.com user auth" # AuthType Basic # AuthUserFile /data/.htpasswd # require valid-user # </Directory> <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} !^www.abc.com$ RewriteRule ^/(.*)$ http://www.abc.com/$1 [R=301,L] </IfModule> ErrorLog "logs/abc.com-error_log" CustomLog "logs/abc.com-access_log" common </VirtualHost>
检测,重新加载
[root@aminglinux-01 ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@aminglinux-01 ~]# /usr/local/apache2.4/bin/apachectl graceful [root@aminglinux-01 ~]#
检测前先查看这个模块有没有起来 /usr/local/apache2.4/bin/apachectl -M|grep -i rewrite
若是没有起来须要编辑配置文件httpd.conf
[root@aminglinux-01 ~]# vi /usr/local/apache2.4/conf/httpd.conf
搜索一下rewrite
LoadModule rewrite_module modules/mod_rewrite.so 找到这一行,把#号删掉
在检测rewrite模块
[root@aminglinux-01 ~]# /usr/local/apache2.4/bin/apachectl -M|grep rewrite rewrite_module (shared) [root@aminglinux-01 ~]#
检测,从新加载
Syntax OK [root@aminglinux-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
查看结果 -I 是只看状态码
[root@aminglinux-01 ~]# curl -x192.168.245.128:80 2111.com.cn <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>301 Moved Permanently</title> </head><body> <h1>Moved Permanently</h1> <p>The document has moved <a href="http://www.abc.com/">here</a>.</p> </body></html> [root@aminglinux-01 ~]# curl -x192.168.245.128:80 2111.com.cn -I HTTP/1.1 301 Moved Permanently Date: Mon, 09 Oct 2017 14:08:44 GMT Server: Apache/2.4.27 (Unix) PHP/5.6.30 Location: http://www.abc.com/ Content-Type: text/html; charset=iso-8859-1 [root@aminglinux-01 ~]#
日志格式,默认是common
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common
"%{User-Agent}i" 用户代理
"%{Referer}i" 浏览器上一次访问的网站是什么
ErrorLog "logs/abc.com-error_log" CustomLog "logs/abc.com-access_log" common
修改成
ErrorLog "logs/abc.com-error_log" CustomLog "logs/abc.com-access_log" combined
从新加载配置文件 -t,graceful
在访问一下:[root@aminglinux-01 ~]# curl -x192.168.245.128:80 2111.com.cn -I
[root@aminglinux-01 ~]# cat /usr/local/apache2.4/logs/abc.com-access_log
原来common
[root@aminglinux-01 ~]# cat /usr/local/apache2.4/logs/abc.com-access_log 192.168.245.128 - - [09/Oct/2017:17:07:36 +0800] "GET HTTP://abc.com/ HTTP/1.1" 200 7 192.168.245.128 - - [09/Oct/2017:17:31:25 +0800] "GET HTTP://abc.com/ HTTP/1.1" 200 7 192.168.245.128 - - [09/Oct/2017:17:53:56 +0800] "GET HTTP://abc.com/ HTTP/1.1" 200 7 192.168.245.1 - - [09/Oct/2017:17:55:37 +0800] "GET /1.php HTTP/1.1" 404 203 192.168.245.1 - - [09/Oct/2017:17:55:40 +0800] "GET /1.php HTTP/1.1" 404 203 192.168.245.1 - - [09/Oct/2017:17:56:03 +0800] "GET /1.php HTTP/1.1" 404 203 192.168.245.1 - - [09/Oct/2017:17:57:26 +0800] "GET /1.php HTTP/1.1" 404 203 192.168.245.128 - - [09/Oct/2017:17:58:10 +0800] "GET HTTP://www.abc.com/ HTTP/1.1" 200 7 192.168.245.1 - - [09/Oct/2017:17:59:16 +0800] "GET /1.php HTTP/1.1" 404 203 192.168.245.128 - - [09/Oct/2017:18:01:40 +0800] "GET HTTP://www.abc.com/ HTTP/1.1" 200 7 192.168.245.1 - - [09/Oct/2017:18:03:15 +0800] "GET /1.php HTTP/1.1" 404 203 192.168.245.128 - - [09/Oct/2017:18:03:18 +0800] "GET HTTP://abc.com/ HTTP/1.1" 200 7 192.168.245.128 - - [09/Oct/2017:18:10:01 +0800] "GET HTTP://abc.com/ HTTP/1.1" 401 381 192.168.245.1 - - [09/Oct/2017:18:11:03 +0800] "GET /1.php HTTP/1.1" 401 381 192.168.245.1 - - [09/Oct/2017:18:13:17 +0800] "GET /1.php HTTP/1.1" 401 381 192.168.245.1 - aming [09/Oct/2017:18:14:54 +0800] "GET /1.php HTTP/1.1" 404 203 192.168.245.1 - aming [09/Oct/2017:18:14:57 +0800] "GET /1.php HTTP/1.1" 404 203 192.168.245.1 - aming [09/Oct/2017:18:15:40 +0800] "GET /1.php HTTP/1.1" 404 203 192.168.245.1 - aming [09/Oct/2017:18:15:43 +0800] "GET /1.php HTTP/1.1" 404 203 192.168.245.128 - aming [09/Oct/2017:18:16:26 +0800] "HEAD HTTP://abc.com/ HTTP/1.1" 200 - 192.168.245.128 - aming [09/Oct/2017:18:16:39 +0800] "GET HTTP://abc.com/ HTTP/1.1" 200 7 192.168.245.128 - aming [09/Oct/2017:18:16:45 +0800] "HEAD HTTP://abc.com/ HTTP/1.1" 200 - 192.168.245.128 - - [09/Oct/2017:22:08:34 +0800] "GET HTTP://2111.com.cn/ HTTP/1.1" 301 227 192.168.245.128 - - [09/Oct/2017:22:08:44 +0800] "HEAD HTTP://2111.com.cn/ HTTP/1.1" 301 - 192.168.245.128 - - [09/Oct/2017:22:11:47 +0800] "HEAD HTTP://2111.com.cn/ HTTP/1.1" 301 -
改成combined
[root@aminglinux-01 ~]# cat /usr/local/apache2.4/logs/abc.com-access_log 192.168.245.128 - - [09/Oct/2017:17:07:36 +0800] "GET HTTP://abc.com/ HTTP/1.1" 200 7 192.168.245.128 - - [09/Oct/2017:17:31:25 +0800] "GET HTTP://abc.com/ HTTP/1.1" 200 7 192.168.245.128 - - [09/Oct/2017:17:53:56 +0800] "GET HTTP://abc.com/ HTTP/1.1" 200 7 192.168.245.1 - - [09/Oct/2017:17:55:37 +0800] "GET /1.php HTTP/1.1" 404 203 192.168.245.1 - - [09/Oct/2017:17:55:40 +0800] "GET /1.php HTTP/1.1" 404 203 192.168.245.1 - - [09/Oct/2017:17:56:03 +0800] "GET /1.php HTTP/1.1" 404 203 192.168.245.1 - - [09/Oct/2017:17:57:26 +0800] "GET /1.php HTTP/1.1" 404 203 192.168.245.128 - - [09/Oct/2017:17:58:10 +0800] "GET HTTP://www.abc.com/ HTTP/1.1" 200 7 192.168.245.1 - - [09/Oct/2017:17:59:16 +0800] "GET /1.php HTTP/1.1" 404 203 192.168.245.128 - - [09/Oct/2017:18:01:40 +0800] "GET HTTP://www.abc.com/ HTTP/1.1" 200 7 192.168.245.1 - - [09/Oct/2017:18:03:15 +0800] "GET /1.php HTTP/1.1" 404 203 192.168.245.128 - - [09/Oct/2017:18:03:18 +0800] "GET HTTP://abc.com/ HTTP/1.1" 200 7 192.168.245.128 - - [09/Oct/2017:18:10:01 +0800] "GET HTTP://abc.com/ HTTP/1.1" 401 381 192.168.245.1 - - [09/Oct/2017:18:11:03 +0800] "GET /1.php HTTP/1.1" 401 381 192.168.245.1 - - [09/Oct/2017:18:13:17 +0800] "GET /1.php HTTP/1.1" 401 381 192.168.245.1 - aming [09/Oct/2017:18:14:54 +0800] "GET /1.php HTTP/1.1" 404 203 192.168.245.1 - aming [09/Oct/2017:18:14:57 +0800] "GET /1.php HTTP/1.1" 404 203 192.168.245.1 - aming [09/Oct/2017:18:15:40 +0800] "GET /1.php HTTP/1.1" 404 203 192.168.245.1 - aming [09/Oct/2017:18:15:43 +0800] "GET /1.php HTTP/1.1" 404 203 192.168.245.128 - aming [09/Oct/2017:18:16:26 +0800] "HEAD HTTP://abc.com/ HTTP/1.1" 200 - 192.168.245.128 - aming [09/Oct/2017:18:16:39 +0800] "GET HTTP://abc.com/ HTTP/1.1" 200 7 192.168.245.128 - aming [09/Oct/2017:18:16:45 +0800] "HEAD HTTP://abc.com/ HTTP/1.1" 200 - 192.168.245.128 - - [09/Oct/2017:22:08:34 +0800] "GET HTTP://2111.com.cn/ HTTP/1.1" 301 227 192.168.245.128 - - [09/Oct/2017:22:08:44 +0800] "HEAD HTTP://2111.com.cn/ HTTP/1.1" 301 - 192.168.245.128 - - [09/Oct/2017:22:11:47 +0800] "HEAD HTTP://2111.com.cn/ HTTP/1.1" 301 - 192.168.245.128 - - [09/Oct/2017:22:36:01 +0800] "HEAD HTTP://2111.com.cn/ HTTP/1.1" 301 - "-" "curl/7.29.0" 192.168.245.128 - - [09/Oct/2017:22:36:05 +0800] "HEAD HTTP://2111.com.cn/ HTTP/1.1" 301 - "-" "curl/7.29.0"
<VirtualHost *:80> DocumentRoot "/data/wwwroot/abc.com" ServerName abc.com ServerAlias abc.com www.example.com 2111.com.cn #<Directory /data/wwwroot/abc.com> # AllowOverride AuthConfig # AuthName "abc.com user auth" # AuthType Basic # AuthUserFile /data/.htpasswd # require valid-user # </Directory> <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} !^www.abc.com$ RewriteRule ^/(.*)$ http://www.abc.com/$1 [R=301,L] </IfModule> ErrorLog "logs/abc.com-error_log" SetEnvIf Request_URI ".*\.gif$" img SetEnvIf Request_URI ".*\.jpg$" img SetEnvIf Request_URI ".*\.png$" img SetEnvIf Request_URI ".*\.bmp$" img SetEnvIf Request_URI ".*\.swf$" img SetEnvIf Request_URI ".*\.js$" img SetEnvIf Request_URI ".*\.css$" img CustomLog "logs/abc.com-access_log" combined env=!img //表示符合img的请求都不会记录到日志里。 </VirtualHost>
<VirtualHost *:80> DocumentRoot "/data/wwwroot/abc.com" ServerName abc.com ServerAlias abc.com www.example.com 2111.com.cn #<Directory /data/wwwroot/abc.com> # AllowOverride AuthConfig # AuthName "abc.com user auth" # AuthType Basic # AuthUserFile /data/.htpasswd # require valid-user # </Directory> <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} !^www.abc.com$ RewriteRule ^/(.*)$ http://www.abc.com/$1 [R=301,L] </IfModule> ErrorLog "logs/abc.com-error_log" SetEnvIf Request_URI ".*\.gif$" img SetEnvIf Request_URI ".*\.jpg$" img SetEnvIf Request_URI ".*\.png$" img SetEnvIf Request_URI ".*\.bmp$" img SetEnvIf Request_URI ".*\.swf$" img SetEnvIf Request_URI ".*\.js$" img SetEnvIf Request_URI ".*\.css$" img CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/abc.com-access_%Y%m%d.log 86400" combined env=!img </VirtualHost>
用apache自带分割工具rotatelogs,以天天进行日志分割。-l的意思是用cst时间,不用-l是utc时间
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} !^www.abc.com$ RewriteRule ^/(.*)$ http://www.abc.com/$1 [R=301,L] </IfModule> <IfModule mod_expires.c> ExpiresActive on ExpiresByType image/gif "access plus 1 days" ExpiresByType image/jpeg "access plus 24 hours" ExpiresByType image/png "access plus 24 hours" ExpiresByType text/css "now plus 2 hour" ExpiresByType application/x-javascript "now plus 2 hours" ExpiresByType application/javascript "now plus 2 hours" ExpiresByType application/x-shockwave-flash "now plus 2 hours" ExpiresDefault "now plus 0 min" </IfModule> ErrorLog "logs/abc.com-error_log" SetEnvIf Request_URI ".*\.gif$" img SetEnvIf Request_URI ".*\.jpg$" img SetEnvIf Request_URI ".*\.png$" img SetEnvIf Request_URI ".*\.bmp$" img SetEnvIf Request_URI ".*\.swf$" img SetEnvIf Request_URI ".*\.js$" img SetEnvIf Request_URI ".*\.css$" img CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/abc.com-access_%Y%m%d.log 86400" combined env=!img
先看看这个模块有没有打开
[root@aminglinux-01 ~]# /usr/local/apache2.4/bin/apachectl -M |grep expire [root@aminglinux-01 ~]#
明显没有打开
编辑主配置文件:/usr/local/apache2.4/conf/httpd.conf
找到expire哪一行,把前面#号删掉
[root@aminglinux-01 ~]# /usr/local/apache2.4/bin/apachectl -M |grep expire expires_module (shared) [root@aminglinux-01 ~]#