虚拟主机的配置
时间:2019-03-19
本文章向大家介绍虚拟主机的配置,主要包括虚拟主机的配置使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
常用的配置
#httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "D:/wamp/www/laravel"
ServerName laravel.com
</VirtualHost>
#不要忘记修改hosts文件
虚拟主机配置(全)
<VirtualHost *:80>
#设置服务器返回给客户端的错误信息中包含的管理员邮件地址
ServerAdmin webmaster@dummy-host.example.com
#项目入口处的文件夹
DocumentRoot "D:/xampp/htdocs/wherein"
#创建重定向URL
ServerName www.shop_dev.com
#服务器遇到错误时记录错误日志的文件
ErrorLog "logs/wherein.com-error.log"
#设置日志文件,并指明日志文件所用的格式
CustomLog "logs/wherein.com-access.log" common
<Directory "D:/xampp/htdocs/wherein"> #为主目录或虚拟目录设置权限
#目录权限
Options FollowSymLinks IncludesNOEXEC Indexes
#访问目录后进入的默认文件
DirectoryIndex index.html index.htm index.php
AllowOverride all
#控制目录和文件的访问权限
Order Deny,Allow
#允许全部
Allow from all
</Directory>
</VirtualHost>
1. ServerAdmin指令:
语法: ServerAdmin email-address|URL
用来设置服务器返回给客户端的错误信息中包含的管理员邮件地址。便于用户在收到错误信息后能及时与管理员取得联系。
2. DocumentRoot指令:
语法:DocumentRoot directory-path
用来设置httpd提供服务的目录。即你所在项目入口处的文件夹。
3. ServerName指令:
语法:ServerName [scheme://] FQDN [:port]
用来设置服务器用于辨识自己的主机名和端口号。主要用于创建重定向URL。
4. ErrorLog指令:
语法: ErrorLog file-path
来设置当服务器遇到错误时记录错误日志的文件。如果file-path不是以/开头的绝对路径,那么将会被认为是一个相对于ServerRoot的相对路径。
5. CustomLog指令:
语法: ErrorLog file-path common
设置日志文件,并指明日志文件所用的格式(通常通过格式的名字)。
6. Directory 目录路径
为主目录或虚拟目录设置权限。
特性:
Options FollowSymLinks IncludesNOEXEC Indexes
命令 | 说明 |
---|---|
Indexes | 允许目录浏览 当客户仅指定要访问的目录,但没有指定要访问目录下的哪个文件,而且目录下不存在默认文档时,Apache以超文本形式返回目录中的文件和子目录列表(虚拟目录不会出现在目录列表中) |
MultiViews | 允许内容协商的多重视图 MultiViews其实是Apache的一个智能特性。当客户访问目录 中一个不存在的对象时,如访问"http://192.168.66.6/data/a",则Apache会查找这个目录下所有a.*文件。由于 data目录下存在a.gif文件,因此Apache会将a.gif文件返回给客户,而不是返回出错信息 |
All | All包含了除MultiViews之外的所有特性,如果没有Options语句,默认为All |
ExecCGI | 允许在该目录下执行CGI脚本 |
FollowSymLinks | 可以在该目录中使用符号连接 |
Includes | 允许服务器端包含功能 |
IncludesNoExec | 允许服务器端包含功能,但禁用执行CGI脚本 |
一旦定义允许目录浏览,就会将Web站点的文件夹和文件名结构暴露给黑客。目录浏览还会允许黑客浏览文件并掌握服务器配置信息,所以指定该权限往往带来安全性上的隐患。除非有充足的理由要使用目录浏览,否则应该禁用它。
DirectoryIndex index.html index.htm index.php
设置访问目录后进入的默认文件
AllowOverride all (http://www.upupw.net/server/n73.html)
AllowOverride从字面上解释是允许覆盖的意思,即Apache允许另一配置文件覆盖现有配置文件。
我们通常利用Apache的rewrite模块对URL进行重写,rewrite规则会写在 .htaccess 文件里。但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.htaccess 所在目录进行配置。
从安全性考虑,根目录的AllowOverride属性一般都配置成不允许任何Override,即:None
在 AllowOverride 设置为 None 时, .htaccess 文件将被完全忽略。当此指令设置为 All 时,所有具有 “.htaccess” 作用域的指令都允许出现在 .htaccess 文件中。
而对于 URL rewrite 来说,至少需要把目录设置为:FileInfo
Order Deny,Allow(https://blog.csdn.net/wlzx120/article/details/52313371)
Allow from all
设置缺省的访问权限与Allow和Deny语句的处理顺序allow, deny:缺省禁止所有客户机的访问,且Allow语句在Deny语句之前被匹配。如果某条件既匹配Deny语句又匹配Allow语句,则Deny语句会起作用(因为Deny语句覆盖了Allow语句)。deny, allow:缺省允许所有客户机的访问,且Deny语句在Allow语句之前被匹配。如果某条件既匹配Deny语句又匹配Allow语句,则Allow语句会起作用(因为Allow语句覆盖了Deny语句)。
- eg
Order deny ,allow
Deny from baidu.com
#除了来自baidu.com域和ip地址为192.168.66.6的客户机外,允许所有客户机访问Order deny ,allow
Deny from 192.168.66.6
Allow from 192.168.66.6
#既匹配Deny语句又匹配Allow语句,由于allow语句覆盖了deny语句,所以是允许所有客户机访问Order
Deny from 192.168.66.1 allow ,deny
Allow from 192.168.66.6
#既匹配Deny语句又匹配Allow语句,由于deny语句覆盖了allow语句,所以是禁止所有客户机访问
Deny from 192.168.66.1
- Require
Require all granted #允许所有
Require all denied #拒绝所有
Require env env-var [env-var] ... #允许匹配环境变量中任意一个
Require method http-method [http-method] ... #允许特定的HTTP方法(GET/POST/HEAD/OPTIONS)
Require expr expression #允许,表达式为true
Require user userid [ userid ] ... #允许特定用户
Require group group-name [group-name] ... #允许特定用户组
Require valid-user # #允许,有效用户
Require ip 192.100 192.168.100 192.168.100.5 #允许特定IP或IP段,多个IP或IP段间使用空格分隔
如果想让局域访问不要忘记数据库权限(mysql本身的用户只能在本机上连接数据库,外网连接的话,需要先添加远程用户并授权。)
- 基于树莓派和Tensowflow的物体识别-brain
- SNA中:中心度及中心势诠释(不完整代码)
- 教程 | 基于计算机视觉使用Python和OpenCV计算道路交通
- 干货 | MVP模式在携程酒店的应用和扩展
- memlock过低导致的数据库性能问题(r6笔记第10天)
- OpenCV和SVM分类器在自动驾驶中的车辆检测
- 自动驾驶的模型预测控制
- 【专业技术】使用html5的十大原因
- 第五课:推理结果的可视化
- 第四课:模型的使用
- 【Java概念学习】--数组的初始化
- linux下重命名文件或文件夹使用mv既可实现。
- 第三课:把tensorflow,模型和测试数据导入Android工程
- D-Link 路由器信息泄露和远程命令执行漏洞分析及全球数据分析报告
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 高性能 Java 应用层网关设计实践
- redis实战第十五篇 redis cluster的批处理中ask重定向解决方案
- 干货 | Elasticsearch 运维实战常用命令清单
- 备战秋招-面经篇-[二十二]
- 快速上手Spring-Data-Redis
- Lua 5.1 参考手册
- 图文详解k8s自动化持续集成之GitLab CI/CD
- Harbor v2.0 镜像回收那些事
- redis实战第十四篇 redis cluster ask重定向
- Go命令官方指南【原译】
- 详解:如何监控小程序异常及处理错误?
- redis实战第十三篇 jedis连接redis cluster
- 哈工大李治军操作系统课程实验环境搭建
- 我用 OpenGL 实现了那些年流行的相机滤镜
- 使用minikube安装kubernetes和dashboard