IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> Apache配置 -> 正文阅读

[PHP知识库]Apache配置

Apache概述

??? Apache是世界上使用排名第一的Web服务器。因为其强大的跨平台与安全性被广泛使用,是最流行的Web服务器端软件之一。他快速,可靠并且通过简单的API扩充,将PERL/Python/php等解释器编译到服务器中。
???Apache有多种产品,可以支持ssl技术,支持多个虚拟主机。Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不适合多处理环境,因此在一个Apache Web站点扩容时,通常是增加服务器或扩充群集点而不是增加处理器。

工作模式

三种稳定的MPM模式(MPM:多进程处理模块)
prefork模式
???Apache在启动前,就预先开放一些子进程,然后等待请求进来。之所以这么做,是为了减少频繁创建和销毁进程的开销。每一个子进程只有一个线程,在一个时间内只能处理一个要求。
优点:成熟稳定,兼容所有新老模块,不用担心线程安全的问题
缺点:占用更多的系统资源,不适合多并发处理

worker工作模式
???多进程与多线程的混合模式。它也预先开放了几个子进程(数量较少),由每一个子进程创建一些线程,同时包括一个监听线程。每个请求过来,会被分配到一个线程来服务。线程通常会共享父进程的内存空间,所以在高并发的场景下,会比prefork更优秀。
优点:占据更少的内存,高并发下表现优秀
缺点:必须考虑线程安全的问题

event工作模式
???与worker很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题。event 中,会有一个专门的线程来管理这些keep-alive线程,当有真实请求过来的时候,将请求传递给服务器线程,执行完毕后,又允许它释放。增强了高并发场景下的请求处理能力。

查看方式

ln -s /usr/local/apache2/bin/* /usr/local/bin/
创建apache的软连接

httpd -V |grep -i "server mpm"
查看当前工作模式

相关文件保存位置

配置文件位置
源码包安装:
主配置文件:vim /usr/local/apache2/etc/httpd.conf
子配置文件:cd /usr/local/apache2/etc/extra/

rpm包安装:/etc/httpd/conf/httpd.conf

网页文件位置:
源码包安装:cd /usr/local/apache2/htdocs/
rpm包安装:/var/www/html/

日志文件位置:
源码包安装:cd /usr/local/apache2/logs/
yum包安装:/var/log/httpd

配置文件详解
针对主机环境的基本配置参数:

ServerRoot /usr/ local/apache2  	#apache主目录
Listen		:80						#监听端口
LoadModule	php7					#加载的相关模块
User
Group								#用户和组
ServerAdmin							#管理员邮箱
ServerName							#服务器名(没有域名解析时,使用临时解析。默认不开启)
ErrorLog "logs/error_log			#服务器错误日志
CustomLog "logs/access_log"common	#访问记录日志
DirectoryIndex index.html index.php	#默认网页文件名,优先级顺序
Include etc/extra/httpd-vhosts.conf	#子配置文件中内容也会加载生效

主页目录及权限

DocumentRoot "/usr/local/apache2/htdocs"
#网页文件存放目录(默认)

<Directory "/usr/local/apache2/htdocs">
#定义指定目录的权限

Options Indexes FollowSymLinks
None					#没有任何额外权限
All						#所有权限(除去MultiViews以外>
Indexes					#浏览权限(当此目录下没有默认网页文件时,显示目录内容)

FollowSymLinks			#准许软连接到其他目录
MultiViews				#准许文件名泛匹配(需要手动开启模块才有效negotiation)


AllowOverride None		#定义是否允许目录下.htaccess文件中的权限生效
None					#.htaccess中权限不生效
All						#文件中所有权限都生效
AuthConfig				#文件中,只有网页认证的权限生效

Require all granted (denied)		#访问控制列表
</Directory>

<IfModule dir_module>					#此标签用来指定访问到指定目录时自动加载哪个页面文件
DirectoryIndex index.php index.html		#可以写多个,但是有优先级之分
</IfModule>

相关实验

目录别名:
通过设置别名的方式将URL指向特定的目录,不在是默认目录
1.修改主配置文件

vim /usr/local/apache2/etc/httpd.conf

#Include etc/extra/httpd-autoindex.conf
 Include etc/extra/httpd-autoindex.conf
 去掉注释即可

2.修改子配置文件:

vim usr/local/apache2/etc/extra/httpd-autoindex.conf

Alias /a/ "/a/b/c/"			//设置别命

<Directory "/a/b/c/">		//赋予一些权限设置
    Options Indexes MultiViews
    AllowOverride None
    Require all granted
</Directory>

重启:/usr/local/apache2/bin/apachectl restart

目录登录保护

# vim /usr/local/ap  ache2/etc/httpd.conf

1.在需要进行登录认证的目录标签中加入如下配置:

<Directory "/usr/local/apache2/htdocs/admin"> #声明被保护目录

Options Indexes FollowSymLinks

AllowOverride All

Require all granted
 
#开启权限认证文件.htaccess

</Directory>

2、在指定目录下创建权限文件
切换到/usr/local/apache2/htdocs/admin,创建 .htaccess 文件,并添加下面的内容

# vi .htaccess

AuthName "Welcome to atguigu" #提示信息

AuthType basic #加密类型

AuthUserFile /usr/local/apache2/htdocs/admin/apache.passwd #密码文件,文件名自定义。(使用绝对路径)

require valid-user

#允许密码文件中所有用户访问

3、建立密码文件,加入允许访问的用户。(此用户和系统用户无关)

/usr/local/apache2/bin/htpasswd -c /usr/local/apache2/htdocs/admin/apache.passwd user1


-c 建立密码文件,只有添加第一个用户时,才能-c

/usr/local/apache2/bin/htpasswd -m /usr/local/apache2/htdocs/admin/apache.passwd user2


-m 再添加更多用户时,使用-m 参数

虚拟主机
???只是一个虚拟空间,主要功能是实现一个机器上多个网站共同部署的一个形式,不过只能进行网站部署。

虚拟主机的分类:

基于 IP 的虚拟主机:一台服务器,多个 ip,搭建多个网站

基于端口的虚拟主机:一台服务器,一个 ip,搭建多个网站,每个网络使用不同端口访问

基于域名的虚拟主机:一台服务器,一个 ip,搭建多个网站,每个网站使用不同域名访问

实验准备:
1.域名解析:准备两个域名

www.sohu.com
www.sina.com

使用本地 hosts 文件进行解析

2.网站主页目录规划
在/htdocs/目录下分别创建 sohu 和 sina 两个目录,并在新建目录内创建 index.html 文件(分别写不一样的内容)

试验步骤:

修改主配置文件开启文件关联

# vi /usr/local/apache2/etc/httpd.conf

Include etc//extra/httpd-vhosts.conf #此行取消注释

编辑子配置文件,编写虚拟主机标签

# vi /usr/local/apache2/etc/extra/httpd-vhosts.conf

添加下方内容,有几个虚拟主机就写几组(添加之前先把原先存在的示例删除掉)
<VirtualHost 192.168.1.20:80>						#虚拟主机标签
ServerAdmin webmaster@sina.com						#管理员邮箱
DocumentRoot "/usr/local/apache2/htdocs/sina"		#网站主目录
ServerName www.sina.com								#完整域名
ErrorLog "logs/sina-error_log"						#错误日志
CustomLog "logs/sina-access_log" common				#访问日志
</VirtualHost>

重启服务,验证结果

Windows 下:浏览器下输入两个不同的域名验证网页内容(提前修改 windows 的 hosts 文件) Linux 下:通过 elinks/curl 命令验证:elinks/curl URL 地址(提前修改 windows 的 hosts 文件)

域名跳转
临时跳转:302
永久跳转:301

实验条件:
虚拟主机能正常访问
打开主配置文件开启重写模块

LoadModule rewrite_modulemodules/mod_rewrite.so #取消注释

实验步骤:

1.修改虚拟主机配置文件

# vi */extra/httpd-vhosts.conf

<Directory "/usr/local/apache2/htdocs/souhu">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

创建规则匹配文件

# vi */.htaccess
在指定的网站目录下创建文件,并添加以下内容

RewriteEngine on
# 开启rewrite功能

RewriteCond %{HTTP_HOST} ^www.souhu.com
# 把以www.sina.com 开头的内容赋值给HTTP_HOST变量

RewriteRule ^(.*)$ http://www.sina.com/$1 [R=permanent,L]
# ^(.*)$ 指代客户端要访问的资源
# $1 把 .* 所指代的内容赋值到$1变量中
# R=permanent 永久重定向 = 301
# L 指定该规则为最后一条生效的规则,以后的不再生效

Apache+openssl实现https
1.准备工作:
检查Apache 是否支持 SSL,检查相应模块是否安装,若安装则将模块启用模块存放目录:/usr/local/apache2/modules

检查模块是否启用:apachectl -M
没启用打开主配置文件:LoadModule ssl_module modules/mod_ssl.so 删掉注释重启服务

2.CA 证书申请:

openssl genrsa -out ca.key 1024
#建立服务器私钥,生成RSA 密钥

openssl req -new -key ca.key -out sudo.csr
#需要依次输入国家,地区,城市,组织,组织单位,Email 等信息。最重要的是有一个 common name,可以写你的名字或者域名。如果为了 https 申请,这个必须和域名吻合,否则会引发浏览器警报。生成的csr 文件交给 CA 签名后形成服务端自己的证书

openssl x509 -req -days 365 -sha256 -in sudo.csr -signkey ca.key -out sudo.crt #使用 CA 服务器签发证书,设置证书的有效期等信息

注意 1:生成完秘钥和证书文件后,将文件存放在 Apache 的安装目录下的cert 目录下
注意 2:在生产环境中必须要在 https 证书厂商注册(否则浏览器不识别)

3.调用 ssl 模块,并启用 ssl 独立配置文件

# vim /usr/local/apache2/etc/httpd.conf

LoadModule ssl_module modules/mod_ssl.so 	#取消注释
Include etc/extra/httpd-ssl.conf			#取消注释

4.修改 conf/extra/httpd-ssl.conf 配置文件,调用证书等文件

#添加 SSL 协议支持协议,去掉不安全的协议
SSLProtocol all -SSLv2 -SSLv3

#修改加密套件如下
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on

#证书公钥配置(签字的)
SSLCertificateFile cert/atguigu.crt

#证书私钥配置
SSLCertificateKeyFile cert/ca.key

5.修改主配置文件,添加虚拟主机

<VirtualHost _default_:443>
# DocumentRoot 目录位置要和 httpd.conf 里面的一致
DocumentRoot "/usr/local/apache2/htdocs" ServerName localhost:443 
SSLCertificateFile cert/sudo.crt
SSLCertificateKeyFile cert/ca.key 
SSLCertificateChainFile cert/sudo.crt

</VirtualHost>

6.强制跳转https访问

<Directory "/usr/local/apache2/htdocs">
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
</Directory>
#开启转发规则

#检查访问端口只要目标不是443的全都使用https重新访问
RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [R=301,L] 

日志切割
1.首先简单设置日志的路径名称

# vim /usr/local/apache2/etc/httpd.conf

编辑添加内容如下:
ErrorLog "logs/error.log"
CustomLog "logs/access.log" combined

指定了日志存放在/usr/local/apache2/logs 目录下分别为 error.log 和 access.log,combined 为日志显示的格式,日志格式可以参考配置文件 httpd.conf 中格式的指定,如下:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common

2.设置 apache 日志分割
同样编辑配置文件httpd.conf

ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/error_%Y%m%d.log 86400"

CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/access_%Y%m%d.log 86400" combined

注意 1:以上仅为两条命令(一条错误日志,一条访问日志),路径太长写不开
注意 2:若开启了 https,则需要修改 http-ssl.conf 配置文件中的日志记录条目

ErrorLog 是错误日志,CustomLog 是访问日志。|就是管道符,意思是把产生的日志交给 rotatelog 这个
工具,而这个工具就是 apache 自带的切割日志的工具。-l 的作用是校准时区为 UTC,也就是北京时间。86
400,单位是秒,正好是一天,那么日志会每天切割一次。而最后面的 combined 为日志的格式,在httpd.conf 中有定义。

不记录指定文件类型的日志
1、配置日志不记录图片的访问

# vim /usr/local/apache2/conf/httpd.conf

相关配置为:

SetEnvIf Request_URI ".*\.gif$" image-request SetEnvIf Request_URI ".*\.jpg$" image-request SetEnvIf Request_URI ".*\.png$" image-request SetEnvIf Request_URI ".*\.bmp$" image-request SetEnvIf Request_URI ".*\.swf$" image-request SetEnvIf Request_URI ".*\.js$" image-request SetEnvIf Request_URI ".*\.css$" image-request

CustomLog "|/usr/local ... _%Y%m%d.log 86400" combined env=!image-request
说明:在原来的访问日志配置基础上,增加了一些 image-request 的定义,比如把 gif、jpg、bmp、 swf
、js、css 等结尾的全标记为 image-request,然后在配置日志后加一个标记 env=!image-request,表示取反。


禁止解析 PHP
某个目录下禁止解析 PHP,这个很有作用,我们做网站安全的时候,这个用的很多,比如某些目录可以上传文件,为了避免上传的文件有木马,所以我们禁止这个目录下面的访问解析 PHP。

配置禁止解析 php
<Directory /usr/local/apache2/htdocs/data>
php_admin_flag engine off
<filesmatch "(.*)php">
Order deny,allow
Deny from all
</filesmatch>
</Directory>
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 15:58:20  更:2022-04-06 15:58:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 13:03:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码