Apache
1.安装
[root@localhost ~]# yum install httpd -y
查看80端口有没有被占用:
[root@localhost ~]# netstat -tunlp |grep 80
[root@localhost ~]#
启动:
[root@localhost ~]# systemctl enable --now httpd
[root@localhost ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2022-09-03 23:06:49 CST; 29s ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 10247 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─10247 /usr/sbin/httpd -DFOREGROUND
├─10248 /usr/sbin/httpd -DFOREGROUND
├─10249 /usr/sbin/httpd -DFOREGROUND
├─10250 /usr/sbin/httpd -DFOREGROUND
├─10251 /usr/sbin/httpd -DFOREGROUND
└─10252 /usr/sbin/httpd -DFOREGROUND
Sep 03 23:06:49 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
Sep 03 23:06:49 localhost.localdomain httpd[10247]: AH00558: httpd: Could not reliably determine the server's fully qualified...essage
Sep 03 23:06:49 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# netstat -tunlp |grep 80
tcp6 0 0 :::80 :::* LISTEN 10247/httpd
[root@localhost ~]# ps -ef |grep httpd
root 10247 1 0 23:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND #主进程,调度进程
apache 10248 10247 0 23:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND #以下是工作进程
apache 10249 10247 0 23:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 10250 10247 0 23:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 10251 10247 0 23:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 10252 10247 0 23:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 10259 10081 0 23:08 pts/1 00:00:00 grep --color=auto httpd
2.配置
[root@localhost ~]# rpm -ql httpd |grep ".conf"
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d
/etc/httpd/conf.modules.d/00-base.conf
/etc/httpd/conf.modules.d/00-dav.conf
/etc/httpd/conf.modules.d/00-lua.conf
/etc/httpd/conf.modules.d/00-mpm.conf
/etc/httpd/conf.modules.d/00-proxy.conf
/etc/httpd/conf.modules.d/00-systemd.conf
/etc/httpd/conf.modules.d/01-cgi.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic
/etc/sysconfig/htcacheclean
/etc/sysconfig/httpd
/usr/lib/tmpfiles.d/httpd.conf
/usr/lib64/httpd/modules/mod_log_config.so
/usr/libexec/initscripts/legacy-actions/httpd/configtest
/usr/share/doc/httpd-2.4.6/httpd-dav.conf
/usr/share/doc/httpd-2.4.6/httpd-default.conf
/usr/share/doc/httpd-2.4.6/httpd-info.conf
/usr/share/doc/httpd-2.4.6/httpd-languages.conf
/usr/share/doc/httpd-2.4.6/httpd-manual.conf
/usr/share/doc/httpd-2.4.6/httpd-mpm.conf
/usr/share/doc/httpd-2.4.6/httpd-multilang-errordoc.conf
/usr/share/doc/httpd-2.4.6/httpd-vhosts.conf
/usr/share/doc/httpd-2.4.6/proxy-html.conf
[root@localhost ~]# cd /etc/h
host.conf hostname hosts hosts.allow hosts.deny httpd/
[root@localhost ~]# cd /etc/httpd/
[root@localhost httpd]# ls
[root@localhost httpd]# vim /etc/httpd/conf/httpd.conf #主配置文件
东西超多:去掉#开头以及“ #”开头并去掉空行:
[root@localhost httpd]# grep -Ev '^[# ]|^$' /etc/httpd/conf/httpd.conf #注,这里有误删
ServerRoot "/etc/httpd" #主配置路径
Listen 80 #运行端口有
Include conf.modules.d/*.conf #通过include语法,将其他目录中的配置文件包含进来(避免一个配置文件体量太大)
User apache #定义用户名
Group apache
ServerAdmin root@localhost #前端语法:<p>(标志开始)内容</p>(标志结尾)
<Directory /> #代表输入IP地址+“/”有内容输出,如:http://10.0.0.130/
</Directory>
DocumentRoot "/var/www/html" #定义网页根目录
<Directory "/var/www">
</Directory>
<Directory "/var/www/html">
</Directory>
<IfModule dir_module>
</IfModule>
<Files ".ht*">
</Files>
ErrorLog "logs/error_log"
LogLevel warn
<IfModule log_config_module>
</IfModule>
<IfModule alias_module>
</IfModule>
<Directory "/var/www/cgi-bin">
</Directory>
<IfModule mime_module>
</IfModule>
AddDefaultCharset UTF-8
<IfModule mime_magic_module>
</IfModule>
EnableSendfile on
IncludeOptional conf.d/*.conf
[root@localhost httpd]# grep -v '^\s*#\|^$' /etc/httpd/conf/httpd.conf
ServerRoot "/etc/httpd" #主配置路径
Listen 80 #运行端口
Include conf.modules.d/*.conf #通过include语法,将其他目录中的配置文件包含进来(避免一个配置文件体量太大)
User apache #定义用户名
Group apache #前端语法<p>内容</p>
ServerAdmin root@localhost
<Directory /> #表示输入http:10.0.0.130/有内容输出
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/var/www/html" #定义根目录,可以修改,前提是服务器有对应目录
<Directory "/var/www"> #可以修改,与根目录匹配
AllowOverride None
Require all granted
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<Files ".ht*">
Require all denied
</Files>
ErrorLog "logs/error_log"
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog "logs/access_log" combined
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
<IfModule mime_module>
TypesConfig /etc/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset UTF-8
<IfModule mime_magic_module>
MIMEMagicFile conf/magic
</IfModule>
EnableSendfile on
IncludeOptional conf.d/*.conf
如下修改:
DocumentRoot "/httpd/html"
#
# Relax access to content within /var/www.
#
<Directory "/httpd">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
[root@localhost ~]# mkdir -p /httpd/html
[root@localhost ~]# cd !$
cd /httpd/html
[root@localhost html]# cat >index.html <<EOF
> <meta charset=utf8>
> 修改了httpd的根目录,测试一下
> EOF
[root@localhost html]# systemctl restart httpd
关闭防火墙,关闭SELINUX
修改端口:
Listen 999
[root@localhost html]# systemctl restart httpd
[root@localhost html]# grep -i "listen" /etc/httpd/conf/httpd.conf
# Listen: Allows you to bind Apache to specific IP addresses and/or
# Change this to Listen on specific IP addresses as shown below to
#Listen 12.34.56.78:80
Listen 999
[root@localho
3.Apache工作模式
工作模式:
- prefork
- httpd刚启动,就fork一些进程,等待用户请求;为了避免频繁创建和销毁进程,带来系统额外开销;成熟稳定;占用资源多,不适合并发场景
- worker
- 使用多进程和多线程的混合模式;也会预先打开一些进程(数量相对较少),每个子进程都会创造一些子线程,同时还会有一个监听线程;每个请求进来,会交给一个线程去处理;线程单位比较进程单位,消耗内存更少;但要考虑多线程资源抢夺的问题
- event
- 和worker类似,解决了TCP的keepalive的长时间连接的问题。当请求来了之后,交给一个子线程去处理。如果该TCP长连接,长时间占用个线程资源,对系统开销大,event模式默认会开启一个监听线程,检测到当子线程处理完毕请求之后,会释放该线程,减轻服务器压力
[root@localhost html]# httpd -V |grep -i "server mpm"
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Server MPM: prefork
4.userdir
userdir模块可以很方便的和他人共享服务器的目录资料
[root@localhost ~]# cd /etc/httpd/conf.d/
[root@localhost conf.d]# ls
autoindex.conf README userdir.conf welcome.conf
要想共享目录文件,应修改配置:
[root@localhost conf.d]# grep -v '^\s*#\|^$' userdir.conf
<IfModule mod_userdir.c>
UserDir disabled #注释掉本行,即开启userdir功能
</IfModule>
<Directory "/home/*/public_html">
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Require method GET POST OPTIONS
</Directory>
做修改:
修改后如下:
[root@localhost conf.d]# grep -v '^\s*#\|^$' userdir.conf
UserDir public_html #这一句不要忘了取消注释
<IfModule mod_userdir.c>
</IfModule>
<Directory "/home/*/public_html">
AllowOverride all
authuserfile "/etc/httpd/passwd"
authname "input your account"
authtype basic
require user xiajz #随便定义一个
</Directory>
创建响应资料(注意权限):
[root@localhost ~]# useradd xiajz && echo xiajz123 |passwd --stdin xiajz
useradd: user 'xiajz' already exists
[root@localhost ~]# su - xiajz
[xiajz@localhost ~]$ mkdir public_html
[xiajz@localhost ~]$ cat > pub_html/index.html <<EOF
<meta charset=utf8>
欢迎来到apache共享目录
EOF
[xiajz@localhost ~]$ chmod -R 755 ~/public_html/
创建apache的用户认证文件:
[xiajz@localhost ~]$ exit
logout
[root@localhost ~]# htpasswd -c /etc/httpd/passwd xiajz
New password:
Re-type new password:
Adding password for user xiajz
[root@localhost ~]#
重启,访问共享目录:
[root@localhost ~]# systemctl restart httpd
访问方式 http://ip:port/~xiajz
[root@localhost ~]# htpasswd -c /etc/httpd/passwd xiajz
New password:
Re-type new password:
Adding password for user xiajz
[root@localhost ~]#
重启,访问共享目录:
[root@localhost ~]# systemctl restart httpd
访问方式 http://ip:port/~xiajz