Apache 安裝 - ir.lib.cyut.edu.tw:8080

43
2019/9/30 1 Apache 安裝 基本 Apache 安裝 基本 Apache 安裝 yum install -y httpd httpd-devel

Transcript of Apache 安裝 - ir.lib.cyut.edu.tw:8080

Page 1: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

1

Apache 安裝

基本 Apache 安裝

• 基本 Apache 安裝

yum install -y httpd httpd-devel

Page 2: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

2

啟動與自動啟動

• 啟動

systemctl start httpd.service

• 設定自動啟動

systemctl enable httpd.service

驗證

• httpd -v

• ss -lt

Page 3: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

3

連結到網站

http://server_ip

連線失敗, why ?

防火牆設定

• 開啟 80 Port

firewall-cmd --permanent --zone=public --add-service=http

• 重新載入

firewall-cmd --reload

Page 4: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

4

測試

• http://SERVER_IP

放置網頁

• 內定首頁目錄

/var/www/html

可上傳測試網頁至此目錄下(winscp 上傳)

Page 5: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

5

Apache 設定檔

Redhat 7系列

設定檔結構

Page 6: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

6

httpd 設定檔結構

/etc/httpd/

conf

conf.d

conf.modules.d

logs

modules

run

httpd.conf 主設定檔

子(模組)設定檔

哪些模組要被載入的設定檔

連結到記錄檔目錄

連結到模組目錄

連結到執行 pid

主設定檔

Page 7: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

7

主設定檔

• 檔名位置 /etc/httpd/conf/httpd.conf

• 重要設定:

子模組定檔

Page 8: Apache 安裝 - ir.lib.cyut.edu.tw:8080

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

各虛擬伺服器的設定檔

Page 9: Apache 安裝 - ir.lib.cyut.edu.tw:8080

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 檔案做各式設定

Page 10: Apache 安裝 - ir.lib.cyut.edu.tw:8080

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

Page 11: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

11

載入模組設定

載入模組設定

• 位置: /etc/httpd/conf.modules.d

• 在此目錄下的 *.conf 檔案在啟動時會被讀取並在入這些設定檔內的模組

• 載入順序依照檔名排列順序載入

• 可以依照需求修改這些要被載入模組的項目

• 裡面各載入內容檔案會依所安裝的模組而新增,如

– 有安裝 php 就會新增一個 15-php.conf

– 有安裝 mod_ssl 就會新增一個 00-ssl.conf

Page 12: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

12

載入模組設定檔目錄範例

• 目錄內檔案範例00-base.conf

00-dav.conf

00-ssl.conf

00-cgi.conf

15-php.conf

安裝 Apache 支援 ssl

自訂憑證

Page 13: Apache 安裝 - ir.lib.cyut.edu.tw:8080

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

Page 14: Apache 安裝 - ir.lib.cyut.edu.tw:8080

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]

Page 15: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

15

載入的模組

nano /etc/httpd/conf.modules.d/00-ssl.conf

LoadModule ssl_module modules/mod_ssl.so

(自動加入無須修改)

基本設定

Page 16: Apache 安裝 - ir.lib.cyut.edu.tw:8080

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>

我的設定

Page 17: Apache 安裝 - ir.lib.cyut.edu.tw:8080

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>

Page 18: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

18

測試

• 重新啟動

systemctl restart httpd.service

https://SERVER_IP/

PHP7 安裝法

Page 19: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

19

使用 Remi 版本庫

• 安裝 Remi 同時會安裝 epel-release yum install -y http://rpms.famillecollet.com/enterprise/remi-release-

7.rpm

更新

• 執行yum update -y

Page 20: Apache 安裝 - ir.lib.cyut.edu.tw:8080

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

Page 21: Apache 安裝 - ir.lib.cyut.edu.tw:8080

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

Page 22: Apache 安裝 - ir.lib.cyut.edu.tw:8080

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

Page 23: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

23

phpinfo() 畫面

PHP 設定

• 設定檔 php.ini

Page 24: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

24

php 設定檔

請注意

• 以下設定檔與作業系統有關係,請先確定你使用的作業系統及PHP運作形式是哪一種,再參考以下設定檔為

Page 25: Apache 安裝 - ir.lib.cyut.edu.tw:8080

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

Page 26: Apache 安裝 - ir.lib.cyut.edu.tw:8080

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

Page 27: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

27

Apache-php-fpm 安裝設定

Using mod_proxy_fcgi

先安裝

• Install Mariadb

• Install Apache

Page 28: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

28

Php-fpm 安裝

使用 Remi 版本庫

• 安裝 Remi 同時會安裝 epel-release yum install -y http://rpms.famillecollet.com/enterprise/remi-release-

7.rpm

Page 29: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

29

更新

• 執行yum update -y

選擇安裝版本

• 安裝 yum-utils(含 yum-config-manager)

yum -y install yum-utils

Page 30: Apache 安裝 - ir.lib.cyut.edu.tw:8080

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

Page 31: Apache 安裝 - ir.lib.cyut.edu.tw:8080

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

. . .

Page 32: Apache 安裝 - ir.lib.cyut.edu.tw:8080

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>

無換行

Page 33: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

33

設定與重新啟動

systemctl start php-fpm.service

systemctl enable php-fpm.service

systemctl restart httpd.service

port

ss -lnt

• 是否可以看到 9000 port 監聽

Page 34: Apache 安裝 - ir.lib.cyut.edu.tw:8080

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)

測試

Page 35: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

35

php.ini 重要參數

php.ini 重要參數設定

• short_open_tag = Off

– 使否允許 <? ?> 標籤,不建議設為 On

• asp_tags (新版不一定會有)

– 使否允許使用 asp 標籤,不建議 On

Page 36: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

36

安全相關

PHP 訊息顯示

• expose_php = Off

– 決定是否暴露 PHP 被安裝在伺服器上

– 建議 Off 不暴露使用 PHP 及版本

Page 37: Apache 安裝 - ir.lib.cyut.edu.tw:8080

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

Page 38: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

38

資源限制

資源限制

• memory_limit = 128M

– 使用記憶體限制

• max_execution_time = 30

– 修改PHP的執行時間上限,避免程式執行過久被終止

• max_input_time = 60

– 腳本解析輸入數據(類似 POST 和 GET)允許的最大時間

Page 39: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

39

顯示錯誤訊息

顯示錯誤訊息

• display_errors = Off /On

– 重要設定値

• Off 不顯示

• On or stdout 顯示到標準輸出裝置(顯示在網頁上)

• 建議設定

– 程式開發: On

– 上線服務: Off ,避免如有錯誤暴露程式相關訊息

Page 40: Apache 安裝 - ir.lib.cyut.edu.tw:8080

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.

Page 41: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

41

其他錯誤訊息

• display_startup_errors = Off

• log_errors = On

• html_errors = On

• cgi.fix_pathinfo=1

Page 42: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

42

檔案上傳相關

POST 限制

• post_max_size = 8M

• 最大 POST 資料限制

• 此値影響上傳檔案大小,此値大於 upload_max_filesize

• memory_limit 應大於 post_max_size

Page 43: Apache 安裝 - ir.lib.cyut.edu.tw:8080

2019/9/30

43

檔案上傳相關

• file_uploads = On ;是否允運許上

• upload_tmp_dir = ; 不設定為內定目錄

• upload_max_filesize = 2M ; 上傳檔案上限

• max_file_uploads = 20 ; 一個請求同時上傳檔案數

• 如要上傳檔案仍須變更其他參數,參考上傳大檔案設定