看板 KnucklesNote
作者 標題 [RockyLinux9] 網頁伺服器 Apache 安裝與設定
時間 2023-09-22 Fri. 01:11:42
安裝環境: Linode 的 Rocky Linux 9
參考: [Linode] 新增 RockyLinux9 主機 - KnucklesNote板
安裝 Apache
$ sudo dnf install httpd
Rocky Linux 9 安裝的是 apache 2.4.53
啟動 httpd
$ sudo systemctl start httpd
設定 Apache 服務隨系統一起啟動
$ sudo systemctl enable httpd
查看執行狀態
$ sudo systemctl status httpd
防火牆開啟 80 與 443 port
$ sudo firewall-cmd --permanent --zone=public --add-service={http,https}
$ sudo firewall-cmd --reload
用瀏覽器連看看能不能看到 Apache 的預設畫面
修改 Apache 設定檔
查看 Apache 的工作模式
$ sudo httpd -V
Server version: Apache/2.4.53 (Rocky Linux)
Server built: Apr 28 2023 00:00:00
Server's Module Magic Number: 20120211:124
Server loaded: APR 1.7.0, APR-UTIL 1.6.1, PCRE 8.44 2020-02-12
Compiled using: APR 1.7.0, APR-UTIL 1.6.1, PCRE 8.44 2020-02-12
Architecture: 64-bit
Server MPM: event
threaded: yes (fixed thread count)
forked: yes (variable process count)
Server compiled with....
可以看到 Server MPM: eventServer built: Apr 28 2023 00:00:00
Server's Module Magic Number: 20120211:124
Server loaded: APR 1.7.0, APR-UTIL 1.6.1, PCRE 8.44 2020-02-12
Compiled using: APR 1.7.0, APR-UTIL 1.6.1, PCRE 8.44 2020-02-12
Architecture: 64-bit
Server MPM: event
threaded: yes (fixed thread count)
forked: yes (variable process count)
Server compiled with....
代表多工處理模式(MPM, Multi-Processing Module)預設是使用 event
Apache 的主要設定檔在 /etc/httpd/conf/httpd.conf
基本上不要改這個檔,而是將要修改的設定另外寫在 /etc/httpd/conf.d/ 裡
例如新增一個 /etc/httpd/conf.d/common.conf
$ sudo vim /etc/httpd/conf.d/common.conf
# 設定 ServerName,將 xxx.xxx.xxx.xxx 改成主機的網址或IP位址
ServerName xxx.xxx.xxx.xxx:80
# 網址沒有指定檔名時,預設開啟的檔名
# 預設 DirectoryIndex index.html
# 加上常用的 index.htm
# 不用加 index.php 安裝php後會自動加在 /etc/httpd/conf.d/php.conf
DirectoryIndex index.html index.htm
# 記憶體管理模式使用 event 時,依記憶體大小調整以下設定
<IfModule event.c>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
ServerName xxx.xxx.xxx.xxx:80
# 網址沒有指定檔名時,預設開啟的檔名
# 預設 DirectoryIndex index.html
# 加上常用的 index.htm
# 不用加 index.php 安裝php後會自動加在 /etc/httpd/conf.d/php.conf
DirectoryIndex index.html index.htm
# 記憶體管理模式使用 event 時,依記憶體大小調整以下設定
<IfModule event.c>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
若沒有設定 ServerName 的話會出現警告
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.x.x. Set the 'ServerName' directive globally to suppress this message
先測試看看有沒有問題
$ sudo apachectl configtest
或是
$ sudo httpd -t
Syntax OK
重新載入設定檔
$ sudo systemctl reload httpd
也可以在不中斷使用者連線的情況下更新設定檔
$ sudo apachectl graceful
設定虛擬主機 Virtual Host
例如我有申請一個網址 mydomain.com 會轉為主機的IP位址
我想要讓這個網址連進來是連到 /var/www/mydomain/ 這個資料夾
連線的記錄檔放在 /var/log/httpd/ 資料夾
先在 /var/www/ 新增 mydomain 資料夾
$ sudo mkdir /var/www/mydomain
設定權限讓 apache 可以讀寫
$ sudo chown apache.apache /var/www/mydomain -R
新增 vhost.conf
$ sudo vim /etc/httpd/conf.d/vhost.conf
# 預設的網頁資料夾
<VirtualHost *:80>
DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost *:80>
ServerName mydomain.com
# 如果還有其他網址要寫在 ServerAlias
ServerAlias www.mydomain.com mydomain2.com
DocumentRoot /var/www/mydomain
<Directory "/var/www/mydomain">
Options FollowSymLinks
AllowOverride All
# 下面這行是用來取代之前的 Allow from all
Require all granted
</Directory>
ErrorLog "/var/log/httpd/mydomain.error.log"
CustomLog "/var/log/httpd/mydomain.access.log" combined
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost *:80>
ServerName mydomain.com
# 如果還有其他網址要寫在 ServerAlias
ServerAlias www.mydomain.com mydomain2.com
DocumentRoot /var/www/mydomain
<Directory "/var/www/mydomain">
Options FollowSymLinks
AllowOverride All
# 下面這行是用來取代之前的 Allow from all
Require all granted
</Directory>
ErrorLog "/var/log/httpd/mydomain.error.log"
CustomLog "/var/log/httpd/mydomain.access.log" combined
</VirtualHost>
測試並重啟httpd
$ sudo httpd -t
$ sudo systemctl restart httpd
SELinux 設定
因為預設有開啟 SELinux 的關係,網頁資料夾若放在 /var/www 以外的地方,
重啟 httpd 會出現錯誤:
Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xeu httpd.service" for details.
查看目前的 SELinux 模式
$ sudo getenforce
Enforcing
將 SELinux 改為寬容模式(permissive)
$ sudo setenforce 0
重啟 httpd 看看,若沒問題那就是 SELinux 擋住的關係
將 SELinux 改為強制模式(Enforcing)
$ sudo setenforce 1
允許 httpd 可以連網路
$ setsebool -P httpd_can_network_connect on
允許可以存取 NFS
$ setsebool -P httpd_use_nfs on
需要上傳檔案的資料夾
$ chcon -R -t httpd_sys_rw_content_t {資料夾路徑}
查看資料夾的 SELinux 設定
$ ll -Z
相關文章:
[CentOS7] Apache 安裝與設定 - KnucklesNote板 - Disp BBS
[CentOS7] Apache 使用 Certbot 申請 Let's Encrypt 的SSL憑證 - KnucklesNote板 - Disp BBS
[Apache] log分析工具 AWStats - KnucklesNote板 - Disp BBS
[Apache] 讀取log檔的流量分析工具 GoAccess - KnucklesNote板 - Disp BBS
[Apache] 安裝 PageSpeed 模組 改善網頁速度 - KnucklesNote板 - Disp BBS
[Apache] mod_evasive 阻擋DDoS攻擊 - KnucklesNote板 - Disp BBS
參考:
https://www.linode.com/docs/guides/how-to-install-a-lamp-stack-on-centos-8/
--
※ 作者: Knuckles 時間: 2023-09-22 01:11:43 (台灣)
※ 編輯: Knuckles 時間: 2024-04-19 08:48:41 (台灣)
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 221
回列表(←)
分享