linux-Apache

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值