环境
Linux Ubuntu 16.04.1
Linux下CentOS和Ubuntu的配置文件略有不同
CentOS的配置文件为httpd.conf
Ubuntu为apache2.conf
安装
sudo apt install mysql-server apache2 php
配置
- 配置虚拟主机
在/etc/apache2/sites-enabled/000-default.conf添加如下配置:<VirtualHost *:8080> #监听的端口号 ServerAdmin webmaster@localhost #服务器返回给客户端的错误信息中包含的管理员邮件地址 可忽略 DocumentRoot /home/feng/workspace/php/MsgBoard# 网站的根目录文件夹,注意这个文件夹的权限必须是755,并且这个文件夹的上层文件夹的权限也是755,不然会出现403错误。 ErrorLog ${APACHE_LOG_DIR}/error_8080.log # 错误日志位置 CustomLog ${APACHE_LOG_DIR}/access_8080.log combined #记录着访问日志 </VirtualHost>
- 目录树及文件说明
- apache2.conf apache配置文件
- envvars apache环境变量配置文件
- ports.conf 监听端口配置文件
- magic 可以设置不同MIME类型文件的一些特殊标识
- mods-enabled 已经启用的模块
- mods-available 已经安装的模块
- sites-enabled 已启用站点配置
- sites-available 可用站点配置
- conf-enabled 已启用的Apache配置
- conf-available 所有Apache配置
- 相关命令
- a2disconf a2enconf 禁止/启用相关配置文件
- a2dismod a2enmod 禁止/启用相关模块
- a2dissite a2ensite 禁止/启用相关虚拟主机
- apache2ctl apache http 服务控制接口
- 相关知识
- <Directory “路径”>标签定义了用户访问控制,后面的路径指定要控制的目标路径
- Options 选项
- Indexes: 是否允许索引页面文件(不安全,建议关闭);
- FollowSynLinks: 是否跟随软链接文件(不安全,建议关闭);
- SymLinksifOwnerMatch:相对安全的跟随软链接指令(如果软链接文件的属主与网页访问用户匹配则允许)
- ExecCGI:是否允许执行CGI脚本;
- All
- None
- AllowOverride 指允许使用与认证授权相关的指令
- directive-type可以是下列各组指令之一:
- AuthConfig:允许使用与认证授权相关的指令(AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require, 等)。
- AuthName “Realm”:认证名称是什么,描述信息,可以任意给,告诉客户端这里为什么要认证
- AuthType:认证类型,一般有两种:Basic:基本认证;digest:摘要认证(不是所有浏览器都支持);通常都是基本认证;
- AuthUserFile:用户认证文件所存放的位置(可以是文本文件、数据库、ldap等,通过动态加载相应的模块实现,默认是保存在文本文件中)
- AuthGroupFile:组文件所存放的位置(基于组用户的认证与用户类似)
- Require:指明认证的用户是哪些,可以是多个用户,用户名之间用空格隔开;如果是所有合法用户,则为“valid-user”;
- 访问控制:
- 在Apache2.4以前版本,通过以下命令控制:
Order:定义allow和deny哪个为默认法则;写在后面的为默认法则:写在前面的指令没有显式定义的即受后面的指令控制; Order allow,deny Deny from 192.168.1.2 #拒绝所有的iP访问 allow from 192.168.1.0/24 #仅允许192.168.1.0网段的IP访问(但拒绝192.168.1.2:最小范围优先匹配原则)
- 在Apache2.4及以后版本,通过Require控制:
Require all granted # 允许所有请求 Require all denied # 允许所有请求 Require ip 127.0.0.1 # 允许ip127.0.0.1的请求 Require host localhost # 允许主机名localhost的请求
- 在Apache2.4以前版本,通过以下命令控制:
优化
- 目前水平那是不可能的╮(╯▽╰)╭
附
- AuthConfig
AuthConfig 允许使用与认证授权相关的指令(AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require, 等)。FileInfo 允许使用控制文档类型的指令(DefaultType, ErrorDocument, ForceType, LanguagePriority, SetHandler, SetInputFilter, SetOutputFilter, mod_mime中的 Add* 和 Remove* 指令等等)、控制文档元数据的指令(Header, RequestHeader, SetEnvIf, SetEnvIfNoCase, BrowserMatch, CookieExpires, CookieDomain, CookieStyle, CookieTracking, CookieName)、mod_rewrite中的指令(RewriteEngine, RewriteOptions, RewriteBase, RewriteCond, RewriteRule)和mod_actions中的Action指令。Indexes 允许使用控制目录索引的指令(AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName, 等)。Limit 允许使用控制主机访问的指令(Allow, Deny, Order)。Options[=Option,…] 允许使用控制指定目录功能的指令(Options和XBitHack)。可以在等号后面附加一个逗号分隔的(无空格的)Options选项列表,用来控制允许Options指令使用哪些选项。
- htaccess
.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。
- 参考文章