Apache 安裝 - ir.lib.cyut.edu.tw:8080
Transcript of Apache 安裝 - ir.lib.cyut.edu.tw:8080
2019/9/30
1
Apache 安裝
基本 Apache 安裝
• 基本 Apache 安裝
yum install -y httpd httpd-devel
2019/9/30
2
啟動與自動啟動
• 啟動
systemctl start httpd.service
• 設定自動啟動
systemctl enable httpd.service
驗證
• httpd -v
• ss -lt
2019/9/30
3
連結到網站
http://server_ip
連線失敗, why ?
防火牆設定
• 開啟 80 Port
firewall-cmd --permanent --zone=public --add-service=http
• 重新載入
firewall-cmd --reload
2019/9/30
4
測試
• http://SERVER_IP
放置網頁
• 內定首頁目錄
/var/www/html
可上傳測試網頁至此目錄下(winscp 上傳)
2019/9/30
5
Apache 設定檔
Redhat 7系列
設定檔結構
2019/9/30
6
httpd 設定檔結構
/etc/httpd/
conf
conf.d
conf.modules.d
logs
modules
run
httpd.conf 主設定檔
子(模組)設定檔
哪些模組要被載入的設定檔
連結到記錄檔目錄
連結到模組目錄
連結到執行 pid
主設定檔
2019/9/30
7
主設定檔
• 檔名位置 /etc/httpd/conf/httpd.conf
• 重要設定:
子模組定檔
2019/9/30
8
子模組定檔
• 位置: /etc/httpd/conf.d/*.conf
• 各種子設定檔
• 這些檔案的設定會在程式啟動是載入設定
• 部分再安裝新模組時才家進來的的,如
– 安裝 php 時會新增 php.conf 的設定檔
• 各子網站的設定檔可以放在此
子設定檔內容範例
• 目錄內檔案範例
autoindex.conf
php.conf
userdir.conf
example1.com.conf
example2.com.conf
example3.com.conf
各虛擬伺服器的設定檔
2019/9/30
9
虛擬伺服器設定
Listen 80
Listen 443
NameVirtualHost *:80
NameVirtualHost *:443
<VirtualHost *:80>
DocumentRoot "/var/www/example1.com/http"
ServerName example1.com # 域名1
# 其他設定
</VirtualHost>
<VirtualHost *:443>
DocumentRoot "/var/www/example1.com/https"
ServerName example1.com # 域名1
# 其他設定 含 ssl 設定
</VirtualHost>
目錄設定範例
<Directory "/var/www/exmp1">
...
AllowOverride All
...
</Directory>
AllowOverride 設定為 None .htaccess 檔案將被完全略過
AllowOverride 設定為 All : 允許於.htaccess 檔案做各式設定
2019/9/30
10
目錄設定範例
<Directory "/var/www/exmp1">
...
Options Indexes FollowSymLinks
...
</Directory>
FollowSymLinks
讓目錄下的連結檔作用,目前的設定是開啟
Indexes
如沒有 index 檔時開自動開啟目錄瀏覽(注意此可能讓客戶知道該目錄的所有檔案,可加 –Indexes 取消)
<directory> 存取設定
<directory /path/dir >
[敘述]
</directory>
• Require all denied # 限制所有存取
• Require all granted # 允許所有存取
• Require host exm.com # 在 exm.com 網域的主機存取
• Require ip 192.168.1.20 192.168.2
2019/9/30
11
載入模組設定
載入模組設定
• 位置: /etc/httpd/conf.modules.d
• 在此目錄下的 *.conf 檔案在啟動時會被讀取並在入這些設定檔內的模組
• 載入順序依照檔名排列順序載入
• 可以依照需求修改這些要被載入模組的項目
• 裡面各載入內容檔案會依所安裝的模組而新增,如
– 有安裝 php 就會新增一個 15-php.conf
– 有安裝 mod_ssl 就會新增一個 00-ssl.conf
2019/9/30
12
載入模組設定檔目錄範例
• 目錄內檔案範例00-base.conf
00-dav.conf
00-ssl.conf
00-cgi.conf
15-php.conf
安裝 Apache 支援 ssl
自訂憑證
2019/9/30
13
新增套件
• 新增 mod_ssl
yum -y install mod_ssl
• 重新啟動
systemctl restart httpd.service
開啟防火牆
• 防火牆firewall-cmd --permanent --zone=public --add-service=https
• 重新載入firewall-cmd --reload
2019/9/30
14
製作憑證
• 憑證目錄
mkdir /etc/httpd/ssl
cd /etc/httpd/ssl
• 產生憑證(假設憑證檔為 honda.*)
openssl req -x509 -nodes -days 3650 -newkeyrsa:2048 -keyout honda.key -out honda.crt
製作憑證(續)
• 注意輸入如果錯誤不能用倒退鍵修改(紅字只是範例)
Country Name (2 letter code) [XX]:tw
State or Province Name (full name) []:Taiwan
Locality Name (eg, city) [Default City]:Taichung
Organization Name (eg, company) [Default Company Ltd]:cyut.tw
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:*.cyut.tw
Email Address []:[email protected]
2019/9/30
15
載入的模組
nano /etc/httpd/conf.modules.d/00-ssl.conf
LoadModule ssl_module modules/mod_ssl.so
(自動加入無須修改)
基本設定
2019/9/30
16
官方建議
• 設定檔
Listen 443
<VirtualHost *:443>
ServerName www.example.com
SSLEngine on
SSLCertificateFile "/path/example.cert"
SSLCertificateKeyFile "/path/example.key“
DocumentRoot /var/www/https
<Directory /var/www/https>
AllowOverride All
</Directory>
</VirtualHost>
我的設定
2019/9/30
17
編輯設定檔(虛擬主機)
nano /etc/httpd/conf.d/ssl.conf
Listen 443 https
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout 300
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
編輯設定檔(虛擬主機)(續)
<VirtualHost _default_:443>DocumentRoot /var/www/httpsErrorLog logs/ssl_error_logTransferLog logs/ssl_access_logLogLevel warnSSLEngine onSSLProtocol all -SSLv2SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEASSLCertificateFile /etc/httpd/ssl/honda.crtSSLCertificateKeyFile /etc/httpd/ssl/honda.keyBrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
2019/9/30
18
測試
• 重新啟動
systemctl restart httpd.service
https://SERVER_IP/
PHP7 安裝法
2019/9/30
19
使用 Remi 版本庫
• 安裝 Remi 同時會安裝 epel-release yum install -y http://rpms.famillecollet.com/enterprise/remi-release-
7.rpm
更新
• 執行yum update -y
2019/9/30
20
選擇安裝版本
• 安裝 yum-utils(含 yum-config-manager)
yum -y install yum-utils
選擇版本
• PHP 7.1
yum-config-manager --enable remi-php71
• PHP 7.0
yum-config-manager --enable remi-php70
2019/9/30
21
安裝 PHP 及相關套件
yum install -y php php-common php-gd php-mbstringphp-devel php-xml php-pear php-curl php-pecl-zip php-pecl-apcu php-mysql php-mcrypt
版本確認
• Check PHP versionls
php --version
2019/9/30
22
重啟動
• 重啟動 (apache)
• Redhat 系列
systemctl restart httpd.service
• Debian 系列
systemctl restart apache2.service
測試 PHP (apache)
cd /var/www/html
echo '<?php phpinfo(); ?>' >> phpinfo.php
http://server_ip/phpinfo.php
2019/9/30
23
phpinfo() 畫面
PHP 設定
• 設定檔 php.ini
2019/9/30
24
php 設定檔
請注意
• 以下設定檔與作業系統有關係,請先確定你使用的作業系統及PHP運作形式是哪一種,再參考以下設定檔為
2019/9/30
25
Redhat7 apache/mod_php 設定檔架構
/etc/
php.ini
php.d
Php-zts.d
主設定檔
子(模組)設定檔
zend
Redhat 7 Apache/php-fpm 設定檔架構
/etc/
php.ini
php.d
php-fpm.d
php-fpm.conf
php-zts.d
pear,conf
主設定檔
子(模組)設定檔
www.conf
2019/9/30
26
Redhat7 Nginx/php-fpm 設定檔架構
/etc/
php.ini
php.d
php-fpm.d
php-fpm.conf
php-zts.d
pear,conf
主設定檔
子(模組)設定檔
www.conf
Debian9 Nginx/php-fpm 設定檔架構
/etc/php/7.0/
cli
mods-available
fpm
子(模組)設定檔
php.ini
php-fpm.conf
conf.d
主設定檔
pool.d
www.conf
2019/9/30
27
Apache-php-fpm 安裝設定
Using mod_proxy_fcgi
先安裝
• Install Mariadb
• Install Apache
2019/9/30
28
Php-fpm 安裝
使用 Remi 版本庫
• 安裝 Remi 同時會安裝 epel-release yum install -y http://rpms.famillecollet.com/enterprise/remi-release-
7.rpm
2019/9/30
29
更新
• 執行yum update -y
選擇安裝版本
• 安裝 yum-utils(含 yum-config-manager)
yum -y install yum-utils
2019/9/30
30
選擇版本
• PHP 7.1
yum-config-manager --enable remi-php71
• PHP 7.0
yum-config-manager --enable remi-php70
Install php-fpm
yum install -y php-fpm php-gd php-mbstring php-devel php-xml php-pear php-curl php-pecl-zip php-pecl-apcu php-mysqlphp-mcrypt
2019/9/30
31
mpm_event_module
nano /etc/httpd/conf.modules.d/00-mpm.confLoadModule mpm_event_module modules/mod_mpm_event.so
其他 mark 掉
Proxy 模組
nano /etc/httpd/conf.modules.d/00-proxy.conf
. . .
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
. . .
2019/9/30
32
新增 php.conf
nano /etc/httpd/conf.d/php.conf
AddType text/html .php
DirectoryIndex index.php
<FilesMatch \.php$>
#SetHandler application/x-httpd-php
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
TCP socket Apache 2.4.9 可用 Unix Domain Socket
Virtualhost.conf
<VirtualHost *:80>
ServerName localhost
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/$1
DocumentRoot /var/www/html
<Directory /var/www/html>
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/httpd/localhost_error.log
CustomLog /var/log/httpd/localhost_access.log combined
</VirtualHost>
無換行
2019/9/30
33
設定與重新啟動
systemctl start php-fpm.service
systemctl enable php-fpm.service
systemctl restart httpd.service
port
ss -lnt
• 是否可以看到 9000 port 監聽
2019/9/30
34
httpd -V
[root@honda php-fpm.d]# httpd -V
AH00558: httpd: ….略
Server version: Apache/2.4.6 (Scientific Linux)
Server built: Oct 19 2017 11:34:11
Server's Module Magic Number: 20120211:24
Server loaded: APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture: 64-bit
Server MPM: event
threaded: yes (fixed thread count)
forked: yes (variable process count)
測試
2019/9/30
35
php.ini 重要參數
php.ini 重要參數設定
• short_open_tag = Off
– 使否允許 <? ?> 標籤,不建議設為 On
• asp_tags (新版不一定會有)
– 使否允許使用 asp 標籤,不建議 On
2019/9/30
36
安全相關
PHP 訊息顯示
• expose_php = Off
– 決定是否暴露 PHP 被安裝在伺服器上
– 建議 Off 不暴露使用 PHP 及版本
2019/9/30
37
目錄限制
• open_basedir
– 限制目錄開啟,限制 PHP 取得不該取的的系統或其他網站資訊
– 範例 open_basedir “/path/dir1/:/var/tmp/”
– 可使用 .htaccess 來限制(虛擬主機),如• php_value open_basedir /var/www/vhost1/:/tmp/
– 目錄最後要加 / 否則如 /path/usr 則會包含 usr1, usr2, usr3 等目錄
禁用特殊函數
• disable_functions =
• 如
disable_functions =phpinfo,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
2019/9/30
38
資源限制
資源限制
• memory_limit = 128M
– 使用記憶體限制
• max_execution_time = 30
– 修改PHP的執行時間上限,避免程式執行過久被終止
• max_input_time = 60
– 腳本解析輸入數據(類似 POST 和 GET)允許的最大時間
2019/9/30
39
顯示錯誤訊息
顯示錯誤訊息
• display_errors = Off /On
– 重要設定値
• Off 不顯示
• On or stdout 顯示到標準輸出裝置(顯示在網頁上)
• 建議設定
– 程式開發: On
– 上線服務: Off ,避免如有錯誤暴露程式相關訊息
2019/9/30
40
顯示項目
• error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
• 建議設定
– 程式開發用: E_ALL (原建議値)
• 此也會顯示 notice 項目,對開發者也是困擾,可以改為 E_ALL & ~E_NOTICE
– 上線服務用途: E_ALL & ~E_DEPRECATED & ~E_STRICT
一般項目說明
• E_ALL
– Show all errors, warnings and notices including coding standards.
• E_ALL & ~E_NOTICE
– Show all errors, except for notices
• E_ALL & ~E_NOTICE & ~E_STRICT
– Show all errors, except for notices and coding standards warnings.
2019/9/30
41
其他錯誤訊息
• display_startup_errors = Off
• log_errors = On
• html_errors = On
• cgi.fix_pathinfo=1
2019/9/30
42
檔案上傳相關
POST 限制
• post_max_size = 8M
• 最大 POST 資料限制
• 此値影響上傳檔案大小,此値大於 upload_max_filesize
• memory_limit 應大於 post_max_size
2019/9/30
43
檔案上傳相關
• file_uploads = On ;是否允運許上
• upload_tmp_dir = ; 不設定為內定目錄
• upload_max_filesize = 2M ; 上傳檔案上限
• max_file_uploads = 20 ; 一個請求同時上傳檔案數
• 如要上傳檔案仍須變更其他參數,參考上傳大檔案設定