站长视角
用户至上

在CentOS 7上安装H2O Web服务器

H2O是新一代HTTP服务器,它具有所有当前正在使用的Web服务器的全功能HTTP / 2实现。使用H2O作为Web服务器,您可以利用HTTP / 2规范的新功能,如延迟优化,服务器推送和服务器端优先级,可以利用很少谈到的现代浏览器功能。

在这个详细的教程中,我将逐步向您展示如何在CentOS 7 x64实例上运行H2O。

先决条件

  • CentOS 7 x64服​​务器实例。
  • 一个sudo用户。
  • SSL证书(可选)

第1步:更新系统

使用您的实例下找到的凭据通过SSH登录,并按如下方式更新系统。

sudo yum install epel-release -y
sudo yum clean all && sudo yum update -y

第2步:安装H2O

要在CentOS 7上安装H2O,必须添加Bintray RPM存储库以安装预构建的H2O二进制文件。使用Nano编辑器创建自定义仓库。

sudo nano /etc/yum.repos.d/bintray-h2o-rpm.repo

将下面的文本复制并粘贴到repo文件中。

[bintray-h2o-rpm]
name=bintray-h2o-rpm
baseurl=https://dl.bintray.com/tatsushid/h2o-rpm/centos/$releasever/$basearch/
gpgcheck=0
repo_gpgcheck=0
enabled=1

接下来,安装H2O。

sudo yum install h2o -y

现在已经安装了H2O,但是在启用和启动服务之前,需要进行适当的配置,我们需要创建一个特定的用户和组来运行H2O。为H2O创建一个组和用户以在命名下运行h2o

sudo groupadd -g 101 h2o
sudo useradd -d /etc/h2o -g 101 -M -s /sbin/nologin -u 101 h2o

第3步:配置H2O Web服务器

下面的步骤将得到的配置设置的各种实例unencryptedencryptedstaticdynamic服务器的设置; 以及所有四个的组合。


重定向http://www.example.comhttp://example.com(静态HTML页面,无PHP)配置

导航到该/etc/h2o/目录。

cd /etc/h2o/

将默认值重命名h2o.confh2o.conf.original

sudo mv h2o.conf h2o.conf.original

创建一个新h2o.conf文件。

sudo nano h2o.conf

将下面的文本复制并粘贴到h2o.conf文件中。

access-log: /var/log/h2o/access.log
compress: ON
error-log: /var/log/h2o/error.log
expires: 1 day
file.index: [ 'index.html' ]
hosts:
  "example.com:80":
    listen:
      port: 80
    paths:
      "/":
        file.dir: /var/www/example.com
  "www.example.com:80":
    listen:
      port: 80
    paths:
      "/":
        redirect:
          status: 301
          url: "http://example.com/"
pid-file: /var/run/h2o/h2o.pid
send-server-name: OFF
setenv:
  HTTP_PROXY: ""
user: h2o

启用并启动H2O服务器。

sudo systemctl enable h2o
sudo systemctl start h2o

index.html使用上面列出/var/www/html的目录选项中的模板创建默认值。file.dir/var/www/example.com

sudo cp -var /var/www/html /var/www/example.com

现在,打开浏览器并输入您的实例的服务器域名(example.comwww.example.com)。你收到Unable to connectThis site can’t be reached消息吗?CentOS的默认防火墙设置不允许到http端口的传入连接。执行以下操作将其打开。

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

在浏览器中刷新页面(F5),您将收到此消息。


Welcome to H2O - an optimized HTTP server

It works!

重定向http://example.comhttp://www.example.com(静态HTML页面,无PHP)配置

导航到该/etc/h2o/目录。

cd /etc/h2o/

将默认值重命名h2o.confh2o.conf.original

sudo mv h2o.conf h2o.conf.original

创建一个新h2o.conf文件。

sudo nano h2o.conf

将以下文本复制并粘贴到h2o.conf文件中。

access-log: /var/log/h2o/access.log
compress: ON
error-log: /var/log/h2o/error.log
expires: 1 day
file.index: [ 'index.html' ]
hosts:
  "example.com:80":
    listen:
      port: 80
    paths:
      "/":
        redirect:
          status: 301
          url: "http://www.example.com/"
  "www.example.com:80":
    listen:
      port: 80
    paths:
      "/":
        file.dir: /var/www/www.example.com
pid-file: /var/run/h2o/h2o.pid
send-server-name: OFF
setenv:
  HTTP_PROXY: ""
user: h2o

启用并启动H2O服务器。

sudo systemctl enable h2o
sudo systemctl start h2o

index.html使用模板在上面列出/var/www/html的目录选项中创建默认文件。file.dir/var/www/www.example.com

sudo cp -var /var/www/html /var/www/www.example.com

现在,打开浏览器并输入您的实例的服务器域名(example.comwww.example.com)。你收到Unable to connectThis site can’t be reached消息吗?CentOS的默认防火墙设置不允许到http端口的传入连接。执行以下操作以打开它。

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

在浏览器中刷新页面(F5),您将收到此消息。


Welcome to H2O - an optimized HTTP server

It works!

重定向http://www.example.comhttp://example.com(动态页面,PHP-FPM 5.6.x)配置

导航到该/etc/h2o/目录。

cd /etc/h2o/

将默认值重命名h2o.confh2o.conf.original

sudo mv h2o.conf h2o.conf.original

创建一个新h2o.conf文件。

sudo nano h2o.conf

将以下文本复制并粘贴到h2o.conf文件中。

access-log: /var/log/h2o/access.log
compress: ON
error-log: /var/log/h2o/error.log
expires: 1 day
file.index: [ 'index.php' ]
hosts:
  "example.com:80":
    listen:
      port: 80
    paths:
      "/":
        file.dir: /var/www/example.com
        redirect:
          internal: YES
          status: 307
          url: /index.php
  "www.example.com:80":
    listen:
      port: 80
    paths:
      "/":
        redirect:
          status: 301
          url: "http://example.com/"
file.custom-handler:
  extension: .php
  fastcgi.connect:
    port: /run/php-fpm-5.6.sock
    type: unix
pid-file: /var/run/h2o/h2o.pid
send-server-name: OFF
setenv:
  HTTP_PROXY: ""
user: h2o

为了处理PHP,必须安装和配置PHP-FPM 5.6守护程序。为了安装比默认版本5.4.x更新的PHP-FPM版本,必须安装包含PHP版本5.6.x,7.0.x和7.1.x的REMI repo。安装PHP 5.6.x版。

sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
sudo yum install php56-php-fpm -y

导航到该/opt/remi/php56/root/etc/目录。

cd /opt/remi/php56/root/etc/

将默认值重命名php-fpm.confphp-fpm.conf.original

sudo mv php-fpm.conf php-fpm.conf.original

创建一个新php-fpm.conf文件。

sudo nano php-fpm.conf

将下面的文本复制并粘贴到php-fpm.conf文件中。

include=/opt/remi/php56/root/etc/php-fpm.d/*.conf
[global]
daemonize = yes
emergency_restart_threshold = 2
emergency_restart_interval = 1m
error_log = /var/log/php-fpm/php-fpm-5.6-error.log
pid = /var/run/php-fpm-5.6.pid
process_control_timeout = 10s

重命名目录中的默认www.conf文件php-fpm.d

sudo mv php-fpm.d/www.conf php-fpm.d/www.conf.original

创建一个新www.conf文件。

sudo nano php-fpm.d/www.conf

将下面的文本复制并粘贴到www.conf文件中。pm.max\_children根据您的VPS实例更改您的CPU数量。

[www]
group = h2o
listen = /var/run/php-fpm-5.6.sock
listen.backlog = 65536
listen.owner = h2o
listen.group = h2o
pm = static
pm.max_children = 2
pm.max_requests = 10240
user = h2o

重命名默认php.ini文件。

sudo mv php.ini php.ini.original

创建一个新php.ini文件。

sudo nano php.ini

将下面的文本复制并粘贴到新文本中php.ini file。更改memory\_limitpost\_max\_sizeupload\_max\_filesizedate.timezone按照您的VPS实例。

[PHP]
allow_url_fopen = On
always_populate_raw_post_data = -1
display_errors = Off
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
expose_php = Off
log_errors = On
memory_limit = 256M
output_buffering = 4096
post_max_size = 64M
register_argc_argv = Off
request_order = "GP"
upload_max_filesize = 64M
variables_order = "GPCS"
[Date]
date.timezone = America/New_York
[Session]
session.cache_limiter =
session.gc_divisor = 1000
session.hash_bits_per_character = 5
session.save_handler = files
session.save_path = "/opt/remi/php56/root/var/lib/php/session/"
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"

/opt/remi/php56/root/var/lib/php/session/目录的组所有权从apache组更改为h2o组。

sudo chown root.h2o /opt/remi/php56/root/var/lib/php/session/

创建PHP-FPM服务器日志所在的目录。

sudo mkdir /var/log/php-fpm/

启用并启动PHP-FPM服务器。

sudo systemctl enable php56-php-fpm 
sudo systemctl start php56-php-fpm

启用并启动H2O服务器。

sudo systemctl enable h2o
sudo systemctl start h2o

创建一个目录,其中默认index.php将驻留在file.dir上面的目录选项列出的目录中/var/www/example.com

sudo mkdir /var/www/example.com

index.php使用phpinfo命令测试PHP 创建默认值。

sudo nano /var/www/example.com/index.php

将下面的文本复制并粘贴到新index.php文件中。

<?php
phpinfo();
?>

现在,打开浏览器并输入您的实例的服务器域名(example.comwww.example.com)。你收到Unable to connectThis site can’t be reached消息吗?CentOS的默认防火墙设置不允许到http端口的传入连接。执行以下操作以打开它。

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

在浏览器中刷新页面(F5),您将获得标准的PHP信息页面。


重定向http://example.comhttp://www.example.com(动态页面,PHP-FPM 5.6.x)配置

导航到该/etc/h2o/目录。

cd /etc/h2o/

将默认值重命名h2o.confh2o.conf.original

sudo mv h2o.conf h2o.conf.original

创建一个新h2o.conf文件。

sudo nano h2o.conf

将下面的文本复制并粘贴到h2o.conf文件中。

access-log: /var/log/h2o/access.log
compress: ON
error-log: /var/log/h2o/error.log
expires: 1 day
file.index: [ 'index.php' ]
hosts:
  "example.com:80":
    listen:
      port: 80
    paths:
      "/":
        redirect:
          status: 301
          url: "http://www.example.com/"
  "www.example.com:80":
    listen:
      port: 80
    paths:
      "/":
        file.dir: /var/www/www.example.com
        redirect:
          internal: YES
          status: 307
          url: /index.php
file.custom-handler:
  extension: .php
  fastcgi.connect:
    port: /run/php-fpm-5.6.sock
    type: unix
pid-file: /var/run/h2o/h2o.pid
send-server-name: OFF
setenv:
  HTTP_PROXY: ""
user: h2o

为了处理PHP,必须安装和配置PHP-FPM 5.6守护程序。为了安装比默认版本5.4.x更新的PHP-FPM版本,必须安装包含PHP版本5.6.x,7.0.x和7.1.x的REMI repo。键入以下命令以安装PHP 5.6.x版。

sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
sudo yum install php56-php-fpm -y

导航到该/opt/remi/php56/root/etc/目录。

cd /opt/remi/php56/root/etc/

将默认值重命名php-fpm.confphp-fpm.conf.original

sudo mv php-fpm.conf php-fpm.conf.original

创建一个新php-fpm.conf文件。

sudo nano php-fpm.conf

将下面的文本复制并粘贴到php-fpm.conf文件中。

include=/opt/remi/php56/root/etc/php-fpm.d/*.conf
[global]
daemonize = yes
emergency_restart_threshold = 2
emergency_restart_interval = 1m
error_log = /var/log/php-fpm/php-fpm-5.6-error.log
pid = /var/run/php-fpm-5.6.pid
process_control_timeout = 10s

重命名目录中的默认www.conf文件php-fpm.d

sudo mv php-fpm.d/www.conf php-fpm.d/www.conf.original

创建一个新www.conf文件。

sudo nano php-fpm.d/www.conf

将以下文本复制并粘贴到www.conf文件中。pm.max\_children根据您的VPS实例更改您的CPU数量。

[www]
group = h2o
listen = /var/run/php-fpm-5.6.sock
listen.backlog = 65536
listen.owner = h2o
listen.group = h2o
pm = static
pm.max_children = 2
pm.max_requests = 10240
user = h2o

重命名默认php.ini文件。

sudo mv php.ini php.ini.original

创建一个新php.ini文件。

sudo nano php.ini

将以下文本复制并粘贴到新文件中php.ini file。更改memory\_limitpost\_max\_sizeupload\_max\_filesizedate.timezone按照您的VPS实例。

[PHP]
allow_url_fopen = On
always_populate_raw_post_data = -1
display_errors = Off
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
expose_php = Off
log_errors = On
memory_limit = 256M
output_buffering = 4096
post_max_size = 64M
register_argc_argv = Off
request_order = "GP"
upload_max_filesize = 64M
variables_order = "GPCS"
[Date]
date.timezone = America/New_York
[Session]
session.cache_limiter =
session.gc_divisor = 1000
session.hash_bits_per_character = 5
session.save_handler = files
session.save_path = "/opt/remi/php56/root/var/lib/php/session/"
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"

/opt/remi/php56/root/var/lib/php/session/目录的组所有权从apache组更改为h2o组。

sudo chown root.h2o /opt/remi/php56/root/var/lib/php/session/

创建PHP-FPM服务器日志所在的目录。

sudo mkdir /var/log/php-fpm/

启用并启动PHP-FPM服务器。

sudo systemctl enable php56-php-fpm 
sudo systemctl start php56-php-fpm

启用并启动H2O服务器。

sudo systemctl enable h2o
sudo systemctl start h2o

创建一个目录,其中默认index.php将驻留在file.dir上面的目录选项列出的目录中/var/www/www.example.com

sudo mkdir /var/www/www.example.com

index.php使用phpinfo命令测试PHP 创建默认值。

sudo nano /var/www/www.example.com/index.php

将下面的文本复制并粘贴到新index.php文件中。

<?php
phpinfo();
?>

现在,打开浏览器并输入您的实例的服务器域名(example.comwww.example.com)。你收到Unable to connectThis site can’t be reached消息吗?CentOS的默认防火墙设置不允许到http端口的传入连接。执行以下操作以打开它。

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

在浏览器中刷新页面(F5),您将获得标准的PHP信息页面。


重定向http://www.example.comhttp://example.com(动态页面,PHP-FPM 7.1.x)配置

导航到该/etc/h2o/目录。

cd /etc/h2o/

将默认值重命名h2o.confh2o.conf.original

sudo mv h2o.conf h2o.conf.original

创建一个新h2o.conf文件。

sudo nano h2o.conf

将下面的文本复制并粘贴到h2o.conf文件中。

access-log: /var/log/h2o/access.log
compress: ON
error-log: /var/log/h2o/error.log
expires: 1 day
file.index: [ 'index.php' ]
hosts:
  "example.com:80":
    listen:
      port: 80
    paths:
      "/":
        file.dir: /var/www/example.com
        redirect:
          internal: YES
          status: 307
          url: /index.php
  "www.example.com:80":
    listen:
      port: 80
    paths:
      "/":
        redirect:
          status: 301
          url: "http://example.com/"
file.custom-handler:
  extension: .php
  fastcgi.connect:
    port: /run/php-fpm-7.1.sock
    type: unix
pid-file: /var/run/h2o/h2o.pid
send-server-name: OFF
setenv:
  HTTP_PROXY: ""
user: h2o

为了处理PHP,必须安装和配置PHP-FPM 7.1守护程序。为了安装比默认版本5.4.x更新的PHP-FPM版本,必须安装包含PHP版本5.6.x,7.0.x和7.1.x的REMI repo。在下面键入以下命令以安装PHP版本7.1.x.

sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
sudo yum install php71-php-fpm -y

导航到该/etc/opt/remi/php71/目录。

cd /etc/opt/remi/php71/

将默认值重命名php-fpm.confphp-fpm.conf.original

sudo mv php-fpm.conf php-fpm.conf.original

创建一个新php-fpm.conf文件。

sudo nano php-fpm.conf

将以下文本复制并粘贴到php-fpm.conf文件中。

include=/etc/opt/remi/php71/php-fpm.d/*.conf
[global]
daemonize = yes
emergency_restart_threshold = 2
emergency_restart_interval = 1m
error_log = /var/log/php-fpm/php-fpm-7.1-error.log
pid = /var/run/php-fpm-7.1.pid
process_control_timeout = 10s

重命名目录中的默认www.conf文件php-fpm.d

sudo mv php-fpm.d/www.conf php-fpm.d/www.conf.original

创建一个新www.conf文件。

sudo nano php-fpm.d/www.conf

将下面的文本复制并粘贴到www.conf文件中。pm.max\_children根据您的VPS实例更改您的CPU数量。

[www]
group = h2o
listen = /var/run/php-fpm-7.1.sock
listen.backlog = 65536
listen.owner = h2o
listen.group = h2o
pm = static
pm.max_children = 2
pm.max_requests = 10240
user = h2o

重命名默认php.ini文件。

sudo mv php.ini php.ini.original

创建一个新php.ini文件。

sudo nano php.ini

将下面的文本复制并粘贴到新文本中php.ini file。更改memory\_limitpost\_max\_sizeupload\_max\_filesizedate.timezone按照您的VPS实例。

[PHP]
allow_url_fopen = On
always_populate_raw_post_data = -1
display_errors = Off
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
expose_php = Off
log_errors = On
memory_limit = 256M
output_buffering = 4096
post_max_size = 64M
register_argc_argv = Off
request_order = "GP"
upload_max_filesize = 64M
variables_order = "GPCS"
[Date]
date.timezone = America/New_York
[Session]
session.cache_limiter =
session.gc_divisor = 1000
session.hash_bits_per_character = 5
session.save_handler = files
session.save_path = "/var/opt/remi/php71/lib/php/session/"
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"

/var/opt/remi/php71/lib/php/session/目录的组所有权从apache组更改为h2o组。

sudo chown root.h2o /var/opt/remi/php71/lib/php/session/

创建PHP-FPM服务器日志所在的目录。

sudo mkdir /var/log/php-fpm/

启用并启动PHP-FPM服务器。

sudo systemctl enable php71-php-fpm 
sudo systemctl start php71-php-fpm

启用并启动H2O服务器。

sudo systemctl enable h2o
sudo systemctl start h2o

创建一个目录,其中默认index.php将驻留在file.dir上面的目录选项列出的目录中/var/www/example.com

sudo mkdir /var/www/example.com

index.php使用phpinfo命令测试PHP 创建默认值。

sudo nano /var/www/example.com/index.php

将下面的文本复制并粘贴到新index.php文件中。

<?php
phpinfo();
?>

现在,打开浏览器并输入您的实例的服务器域名(example.comwww.example.com)。你收到Unable to connectThis site can’t be reached消息吗?CentOS的默认防火墙设置不允许到http端口的传入连接。执行以下操作以打开它。

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

在浏览器中刷新页面(F5),您将获得标准的PHP信息页面。


重定向http://example.comhttp://www.example.com(动态页面,PHP-FPM 7.1.x)配置

导航到该/etc/h2o/目录。

cd /etc/h2o/

将默认值重命名h2o.confh2o.conf.original

sudo mv h2o.conf h2o.conf.original

创建一个新h2o.conf文件。

sudo nano h2o.conf

将下面的文本复制并粘贴到h2o.conf文件中。

access-log: /var/log/h2o/access.log
compress: ON
error-log: /var/log/h2o/error.log
expires: 1 day
file.index: [ 'index.php' ]
hosts:
  "example.com:80":
    listen:
      port: 80
    paths:
      "/":
        redirect:
          status: 301
          url: "http://www.example.com/"
  "www.example.com:80":
    listen:
      port: 80
    paths:
      "/":
        file.dir: /var/www/www.example.com
        redirect:
          internal: YES
          status: 307
          url: /index.php
file.custom-handler:
  extension: .php
  fastcgi.connect:
    port: /run/php-fpm-7.1.sock
    type: unix
pid-file: /var/run/h2o/h2o.pid
send-server-name: OFF
setenv:
  HTTP_PROXY: ""
user: h2o

为了处理PHP,必须安装和配置PHP-FPM 7.1守护程序。为了安装比默认版本5.4.x更新的PHP-FPM版本,必须安装包含PHP版本5.6.x,7.0.x和7.1.x的REMI repo。在下面键入以下命令以安装PHP版本7.1.x.

sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
sudo yum install php71-php-fpm -y

导航到该/etc/opt/remi/php71/目录。

cd /etc/opt/remi/php71/

将默认值重命名php-fpm.confphp-fpm.conf.original

sudo mv php-fpm.conf php-fpm.conf.original

创建一个新php-fpm.conf文件。

sudo nano php-fpm.conf

将下面的文本复制并粘贴到php-fpm.conf文件中。

include=/etc/opt/remi/php71/php-fpm.d/*.conf
[global]
daemonize = yes
emergency_restart_threshold = 2
emergency_restart_interval = 1m
error_log = /var/log/php-fpm/php-fpm-7.1-error.log
pid = /var/run/php-fpm-7.1.pid
process_control_timeout = 10s

重命名目录中的默认www.conf文件php-fpm.d

sudo mv php-fpm.d/www.conf php-fpm.d/www.conf.original

创建一个新www.conf文件。

sudo nano php-fpm.d/www.conf

将以下文本复制并粘贴到www.conf文件中。pm.max\_children根据您的VPS实例更改您的CPU数量。

[www]
group = h2o
listen = /var/run/php-fpm-7.1.sock
listen.backlog = 65536
listen.owner = h2o
listen.group = h2o
pm = static
pm.max_children = 2
pm.max_requests = 10240
user = h2o

重命名默认php.ini文件。

sudo mv php.ini php.ini.original

创建一个新php.ini文件。

sudo nano php.ini

将以下文本复制并粘贴到新文本中php.ini file。更改memory\_limitpost\_max\_sizeupload\_max\_filesizedate.timezone按照您的VPS实例。

[PHP]
allow_url_fopen = On
always_populate_raw_post_data = -1
display_errors = Off
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
expose_php = Off
log_errors = On
memory_limit = 256M
output_buffering = 4096
post_max_size = 64M
register_argc_argv = Off
request_order = "GP"
upload_max_filesize = 64M
variables_order = "GPCS"
[Date]
date.timezone = America/New_York
[Session]
session.cache_limiter =
session.gc_divisor = 1000
session.hash_bits_per_character = 5
session.save_handler = files
session.save_path = "/var/opt/remi/php71/lib/php/session"
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"

/var/opt/remi/php71/lib/php/session/目录的组所有权从apache组更改为h2o组。

sudo chown root.h2o /var/opt/remi/php71/lib/php/session/

创建PHP-FPM服务器日志所在的目录。

sudo mkdir /var/log/php-fpm/

启用并启动PHP-FPM服务器。

sudo systemctl enable php71-php-fpm 
sudo systemctl start php71-php-fpm

启用并启动H2O服务器。

sudo systemctl enable h2o
sudo systemctl start h2o

创建一个目录,其中默认index.php将驻留在file.dir上面的目录选项列出的目录中/var/www/example.com

sudo mkdir /var/www/www.example.com

index.php使用phpinfo命令测试PHP 创建默认值。

sudo nano /var/www/www.example.com/index.php

将下面的文本复制并粘贴到新index.php文件中。

<?php
phpinfo();
?>

现在,打开浏览器并输入您的实例的服务器域名(example.comwww.example.com)。你收到Unable to connectThis site can’t be reached消息吗?CentOS的默认防火墙设置不允许到http端口的传入连接。执行以下操作以打开它。

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

在浏览器中刷新页面(F5),您将获得标准的PHP信息页面。


重定向http://example.comhttp://www.example.com以及https://www.example.comhttps://example.com(静态HTML页面,没有PHP)配置

导航到该/etc/h2o/目录。

cd /etc/h2o/

将默认值重命名h2o.confh2o.conf.original

sudo mv h2o.conf h2o.conf.original

创建一个新h2o.conf文件。

sudo nano h2o.conf

将下面的文本复制并粘贴到h2o.conf文件中。

access-log: /var/log/h2o/access.log
compress: ON
error-log: /var/log/h2o/error.log
expires: 1 day
file.index: [ 'index.html' ]
hosts:
  "example.com:80":
    listen:
      port: 80
    paths:
      "/":
        redirect:
          status: 301
          url: "https://example.com/"
  "www.example.com:80":
    listen:
      port: 80
    paths:
      "/":
        redirect:
          status: 301
          url: "https://www.example.com/"
  "example.com:443":
    listen:
      port: 443
      ssl:
        <<: !file /etc/h2o/conf.d/ssl.conf
        certificate-file: /location/of/certificate/file/fullchain.ext
        key-file: /location/of/private/key/file/privkey.ext
    paths:
      "/":
        file.dir: /var/www/example.com
        header.add: "strict-transport-security: max-age=31536000; includeSubDomains; preload"
  "www.example.com:443":
    listen:
      port: 443
      ssl:
        <<: !file /etc/h2o/conf.d/ssl.conf
        certificate-file: /location/of/certificate/file/fullchain.ext
        key-file: /location/of/private/key/file/privkey.ext
    paths:
      "/":
        header.add: "strict-transport-security: max-age=31536000; includeSubDomains; preload"
        redirect:
          status: 301
          url: "https://example.com/"
pid-file: /var/run/h2o/h2o.pid
send-server-name: OFF
setenv:
  HTTP_PROXY: ""
user: h2o

创建自定义目录以存储使用SSL的所有网站的默认SSL选项。

sudo mkdir conf.d

创建一个新ssl.conf文件。

sudo nano conf.d/ssl.conf

将以下文本复制并粘贴到ssl.conf文件中。

cipher-preference: server
cipher-suite: ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
dh-file: /etc/ssl/h2o/dhparam_2048.pem

创建一个目录来存储dhparam_2048.pem将通过cronjob每天重新生成的文件。

sudo mkdir /etc/ssl/h2o/

创建一个新regenerate_dhparam文件。

sudo nano /etc/cron.daily/regenerate_dhparam

将以下文本复制并粘贴到regenerate_dhparam文件中。

#!/bin/bash
cd /etc/ssl/h2o
umask 022
for length in 2048
do
openssl dhparam -out dhparam_$length.tmp $length && mv dhparam_$length.tmp dhparam_$length.pem
chmod 444 dhparam_$length.pem
done

使bash文件刚刚创建可执行文件。

sudo chmod +x /etc/cron.daily/regenerate_dhparam

执行首次运行的bash脚本,因为如果未生成H2O,H2O将无法正常启动。首次运行时需要大约一两分钟才能生成。

sudo /etc/cron.daily/regenerate_dhparam

启用并启动H2O服务器。

sudo systemctl enable h2o
sudo systemctl start h2o

index.html使用上面列出/var/www/html的目录选项中的模板创建默认值。file.dir/var/www/example.com

sudo cp -var /var/www/html /var/www/example.com

现在,打开浏览器并输入您的实例的服务器域名(example.comwww.example.com)。你收到Unable to connectThis site can’t be reached消息吗?CentOS的默认防火墙设置不允许到http端口的传入连接。执行以下操作以打开它。

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

在浏览器中刷新页面(F5),您将收到此消息。


Welcome to H2O - an optimized HTTP server

It works!

重定向http://example.comhttp://www.example.com以及https://example.comhttps://www.example.com(静态HTML页面,没有PHP)配置

导航到该/etc/h2o/目录。

cd /etc/h2o/

将默认值重命名h2o.confh2o.conf.original

sudo mv h2o.conf h2o.conf.original

创建一个新h2o.conf文件。

sudo nano h2o.conf

将下面的文本复制并粘贴到h2o.conf文件中。

access-log: /var/log/h2o/access.log
compress: ON
error-log: /var/log/h2o/error.log
expires: 1 day
file.index: [ 'index.html' ]
hosts:
  "example.com:80":
    listen:
      port: 80
    paths:
      "/":
        redirect:
          status: 301
          url: "https://example.com/"
  "www.example.com:80":
    listen:
      port: 80
    paths:
      "/":
        redirect:
          status: 301
          url: "https://www.example.com/"
  "example.com:443":
    listen:
      port: 443
      ssl:
        <<: !file /etc/h2o/conf.d/ssl.conf
        certificate-file: /location/of/certificate/file/fullchain.ext
        key-file: /location/of/private/key/file/privkey.ext
    paths:
      "/":
        header.add: "strict-transport-security: max-age=31536000; includeSubDomains; preload"
        redirect:
          status: 301
          url: "https://www.example.com/"
  "www.example.com:443":
    listen:
      port: 443
      ssl:
        <<: !file /etc/h2o/conf.d/ssl.conf
        certificate-file: /location/of/certificate/file/fullchain.ext
        key-file: /location/of/private/key/file/privkey.ext
    paths:
      "/":
        file.dir: /var/www/www.example.com
        header.add: "strict-transport-security: max-age=31536000; includeSubDomains; preload"
pid-file: /var/run/h2o/h2o.pid
send-server-name: OFF
setenv:
  HTTP_PROXY: ""
user: h2o

创建自定义目录以存储使用SSL的所有网站的默认SSL选项。

sudo mkdir conf.d

创建一个新ssl.conf文件。

sudo nano conf.d/ssl.conf

将以下文本复制并粘贴到ssl.conf文件中。

cipher-preference: server
cipher-suite: ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
dh-file: /etc/ssl/h2o/dhparam_2048.pem

创建一个目录来存储dhparam_2048.pem将通过cronjob每天重新生成的文件。

sudo mkdir /etc/ssl/h2o/

创建一个新regenerate_dhparam文件。

sudo nano /etc/cron.daily/regenerate_dhparam

将以下文本复制并粘贴到regenerate_dhparam文件中。

#!/bin/bash
cd /etc/ssl/h2o
umask 022
for length in 2048
do
openssl dhparam -out dhparam_$length.tmp $length && mv dhparam_$length.tmp dhparam_$length.pem
chmod 444 dhparam_$length.pem
done

使bash文件刚刚创建可执行文件。

sudo chmod +x /etc/cron.daily/regenerate_dhparam

执行首次运行的bash脚本,因为如果未生成H2O,H2O将无法正常启动。首次运行时需要大约一两分钟才能生成。

sudo /etc/cron.daily/regenerate_dhparam

启用并启动H2O服务器。

sudo systemctl enable h2o
sudo systemctl start h2o

index.html使用上面列出/var/www/html的目录选项中的模板创建默认值。file.dir/var/www/www.example.com

sudo cp -var /var/www/html /var/www/www.example.com

现在,打开浏览器并输入您的实例的服务器域名(example.comwww.example.com)。你收到Unable to connectThis site can’t be reached消息吗?CentOS的默认防火墙设置不允许到http端口的传入连接。执行以下操作以打开它。

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

在浏览器中刷新页面(F5),您将收到此消息。


Welcome to H2O - an optimized HTTP server

It works!

重定向http://example.comhttp://www.example.com以及https://www.example.comhttps://example.com(动态页面,PHP-FPM 5.6.x)配置

导航到该/etc/h2o/目录。

cd /etc/h2o/

将默认值重命名h2o.confh2o.conf.original

sudo mv h2o.conf h2o.conf.original

创建一个新h2o.conf文件。

sudo nano h2o.conf

将下面的文本复制并粘贴到h2o.conf文件中。

access-log: /var/log/h2o/access.log
compress: ON
error-log: /var/log/h2o/error.log
expires: 1 day
file.index: [ 'index.php' ]
hosts:
  "example.com:80":
    listen:
      port: 80
    paths:
      "/":
        redirect:
          status: 301
          url: "https://example.com/"
  "www.example.com:80":
    listen:
      port: 80
    paths:
      "/":
        redirect:
          status: 301
          url: "https://www.example.com/"
  "example.com:443":
    listen:
      port: 443
      ssl:
        <<: !file /etc/h2o/conf.d/ssl.conf
        certificate-file: /location/of/certificate/file/fullchain.ext
        key-file: /location/of/private/key/file/privkey.ext
    paths:
      "/":
        file.dir: /var/www/example.com
        header.add: "strict-transport-security: max-age=31536000; includeSubDomains; preload"
        redirect:
          internal: YES
          status: 307
          url: /index.php
  "www.example.com:443":
    listen:
      port: 443
      ssl:
        <<: !file /etc/h2o/conf.d/ssl.conf
        certificate-file: /location/of/certificate/file/fullchain.ext
        key-file: /location/of/private/key/file/privkey.ext
    paths:
      "/":
        header.add: "strict-transport-security: max-age=31536000; includeSubDomains; preload"
        redirect:
          status: 301
          url: "https://example.com/"
file.custom-handler:
  extension: .php
  fastcgi.connect:
    port: /run/php-fpm-5.6.sock
    type: unix
pid-file: /var/run/h2o/h2o.pid
send-server-name: OFF
setenv:
  HTTP_PROXY: ""
user: h2o

创建自定义目录以存储使用SSL的所有网站的默认SSL选项。

sudo mkdir conf.d

创建一个新ssl.conf文件。

sudo nano conf.d/ssl.conf

将下面的文本复制并粘贴到ssl.conf文件中。

cipher-preference: server
cipher-suite: ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
dh-file: /etc/ssl/h2o/dhparam_2048.pem

创建一个目录来存储dhparam_2048.pem将通过cronjob每天重新生成的文件。

sudo mkdir /etc/ssl/h2o/

创建一个新regenerate_dhparam文件。

sudo nano /etc/cron.daily/regenerate_dhparam

将以下文本复制并粘贴到regenerate_dhparam文件中。

#!/bin/bash
cd /etc/ssl/h2o
umask 022
for length in 2048
do
openssl dhparam -out dhparam_$length.tmp $length && mv dhparam_$length.tmp dhparam_$length.pem
chmod 444 dhparam_$length.pem
done

使bash文件刚刚创建可执行文件。

sudo chmod +x /etc/cron.daily/regenerate_dhparam

执行首次运行的bash脚本,因为如果未生成H2O,H2O将无法正常启动。首次运行时需要大约一两分钟才能生成。

sudo /etc/cron.daily/regenerate_dhparam

为了处理PHP,必须安装和配置PHP-FPM 5.6守护程序。为了安装比默认版本5.4.x更新的PHP-FPM版本,必须安装包含PHP版本5.6.x,7.0.x和7.1.x的REMI repo。键入以下命令以安装PHP 5.6.x版。

sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
sudo yum install php56-php-fpm -y

导航到该/opt/remi/php56/root/etc/目录。

cd /opt/remi/php56/root/etc/

将默认值重命名php-fpm.confphp-fpm.conf.original

sudo mv php-fpm.conf php-fpm.conf.original

创建一个新php-fpm.conf文件。

sudo nano php-fpm.conf

将以下文本复制并粘贴到php-fpm.conf文件中。

include=/opt/remi/php56/root/etc/php-fpm.d/*.conf
[global]
daemonize = yes
emergency_restart_threshold = 2
emergency_restart_interval = 1m
error_log = /var/log/php-fpm/php-fpm-5.6-error.log
pid = /var/run/php-fpm-5.6.pid
process_control_timeout = 10s

重命名目录中的默认www.conf文件php-fpm.d

sudo mv php-fpm.d/www.conf php-fpm.d/www.conf.original

创建一个新www.conf文件。

sudo nano php-fpm.d/www.conf

将下面的文本复制并粘贴到www.conf文件中。pm.max\_children根据您的VPS实例更改您的CPU数量。

[www]
group = h2o
listen = /var/run/php-fpm-5.6.sock
listen.backlog = 65536
listen.owner = h2o
listen.group = h2o
pm = static
pm.max_children = 2
pm.max_requests = 10240
user = h2o

重命名默认php.ini文件。

sudo mv php.ini php.ini.original

创建一个新php.ini文件。

sudo nano php.ini

将下面的文本复制并粘贴到新文本中php.ini file。更改memory\_limitpost\_max\_sizeupload\_max\_filesizedate.timezone按照您的VPS实例。

[PHP]
allow_url_fopen = On
always_populate_raw_post_data = -1
display_errors = Off
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
expose_php = Off
log_errors = On
memory_limit = 256M
output_buffering = 4096
post_max_size = 64M
register_argc_argv = Off
request_order = "GP"
upload_max_filesize = 64M
variables_order = "GPCS"
[Date]
date.timezone = America/New_York
[Session]
session.cache_limiter =
session.gc_divisor = 1000
session.hash_bits_per_character = 5
session.save_handler = files
session.save_path = "/opt/remi/php56/root/var/lib/php/session/"
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"

/opt/remi/php56/root/var/lib/php/session/目录的组所有权从apache组更改为h2o组。

sudo chown root.h2o /opt/remi/php56/root/var/lib/php/session/

创建PHP-FPM服务器日志所在的目录。

sudo mkdir /var/log/php-fpm/

启用并启动PHP-FPM服务器。

sudo systemctl enable php56-php-fpm 
sudo systemctl start php56-php-fpm

启用并启动H2O服务器。

sudo systemctl enable h2o
sudo systemctl start h2o

创建一个目录,其中默认index.php将驻留在file.dir上面的目录选项列出的目录中/var/www/example.com

sudo mkdir /var/www/example.com

index.php使用phpinfo命令测试PHP 创建默认值。

sudo nano /var/www/example.com/index.php

将下面的文本复制并粘贴到新index.php文件中。

<?php
phpinfo();
?>

现在,打开浏览器并输入您的实例的服务器域名(example.comwww.example.com)。你收到Unable to connectThis site can’t be reached消息吗?CentOS的默认防火墙设置不允许到http端口的传入连接。执行以下操作以打开它。

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

在浏览器中刷新页面(F5),您将获得标准的PHP信息页面。


重定向http://example.comhttp://www.example.com以及https://example.comhttps://www.example.com(动态页面,PHP-FPM 5.6.x)配置

导航到该/etc/h2o/目录。

cd /etc/h2o/

将默认值重命名h2o.confh2o.conf.original

sudo mv h2o.conf h2o.conf.original

创建一个新h2o.conf文件。

sudo nano h2o.conf

将下面的文本复制并粘贴到h2o.conf文件中。

access-log: /var/log/h2o/access.log
compress: ON
error-log: /var/log/h2o/error.log
expires: 1 day
file.index: [ 'index.php' ]
hosts:
  "example.com:80":
    listen:
      port: 80
    paths:
      "/":
        redirect:
          status: 301
          url: "https://example.com/"
  "www.example.com:80":
    listen:
      port: 80
    paths:
      "/":
        redirect:
          status: 301
          url: "https://www.example.com/"
  "example.com:443":
    listen:
      port: 443
      ssl:
        <<: !file /etc/h2o/conf.d/ssl.conf
        certificate-file: /location/of/certificate/file/fullchain.ext
        key-file: /location/of/private/key/file/privkey.ext
    paths:
      "/":
        header.add: "strict-transport-security: max-age=31536000; includeSubDomains; preload"
        redirect:
          status: 301
          url: "https://www.example.com/"
  "www.example.com:443":
    listen:
      port: 443
      ssl:
        <<: !file /etc/h2o/conf.d/ssl.conf
        certificate-file: /location/of/certificate/file/fullchain.ext
        key-file: /location/of/private/key/file/privkey.ext
    paths:
      "/":
        file.dir: /var/www/www.example.com
        header.add: "strict-transport-security: max-age=31536000; includeSubDomains; preload"
        redirect:
          internal: YES
          status: 307
          url: /index.php
file.custom-handler:
  extension: .php
  fastcgi.connect:
    port: /run/php-fpm-5.6.sock
    type: unix
pid-file: /var/run/h2o/h2o.pid
send-server-name: OFF
setenv:
  HTTP_PROXY: ""
user: h2o

创建自定义目录以存储使用SSL的所有网站的默认SSL选项。

sudo mkdir conf.d

创建一个新ssl.conf文件。

sudo nano conf.d/ssl.conf

将下面的文本复制并粘贴到ssl.conf文件中。

cipher-preference: server
cipher-suite: ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
dh-file: /etc/ssl/h2o/dhparam_2048.pem

创建一个目录来存储dhparam_2048.pem将通过cronjob每天重新生成的文件。

sudo mkdir /etc/ssl/h2o/

创建一个新regenerate_dhparam文件。

sudo nano /etc/cron.daily/regenerate_dhparam

将以下文本复制并粘贴到regenerate_dhparam文件中。

#!/bin/bash
cd /etc/ssl/h2o
umask 022
for length in 2048
do
openssl dhparam -out dhparam_$length.tmp $length && mv dhparam_$length.tmp dhparam_$length.pem
chmod 444 dhparam_$length.pem
done

使bash文件刚刚创建可执行文件。

sudo chmod +x /etc/cron.daily/regenerate_dhparam

执行首次运行的bash脚本,因为如果未生成H2O,H2O将无法正常启动。首次运行时需要大约一两分钟才能生成。

sudo /etc/cron.daily/regenerate_dhparam

为了处理PHP,必须安装和配置PHP-FPM 5.6守护程序。为了安装比默认版本5.4.x更新的PHP-FPM版本,必须安装包含PHP版本5.6.x,7.0.x和7.1.x的REMI repo。键入以下命令以安装PHP 5.6.x版。

sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
sudo yum install php56-php-fpm -y

导航到该/opt/remi/php56/root/etc/目录。

cd /opt/remi/php56/root/etc/

将默认值重命名php-fpm.confphp-fpm.conf.original

sudo mv php-fpm.conf php-fpm.conf.original

创建一个新php-fpm.conf文件。

sudo nano php-fpm.conf

将下面的文本复制并粘贴到php-fpm.conf文件中。

include=/opt/remi/php56/root/etc/php-fpm.d/*.conf
[global]
daemonize = yes
emergency_restart_threshold = 2
emergency_restart_interval = 1m
error_log = /var/log/php-fpm/php-fpm-5.6-error.log
pid = /var/run/php-fpm-5.6.pid
process_control_timeout = 10s

重命名目录中的默认www.conf文件php-fpm.d

sudo mv php-fpm.d/www.conf php-fpm.d/www.conf.original

创建一个新www.conf文件。

sudo nano php-fpm.d/www.conf

将下面的文本复制并粘贴到www.conf文件中。pm.max\_children根据您的VPS实例更改您的CPU数量。

[www]
group = h2o
listen = /var/run/php-fpm-5.6.sock
listen.backlog = 65536
listen.owner = h2o
listen.group = h2o
pm = static
pm.max_children = 2
pm.max_requests = 10240
user = h2o

重命名默认php.ini文件。

sudo mv php.ini php.ini.original

创建一个新php.ini文件。

sudo nano php.ini

将以下文本复制并粘贴到新文本中php.ini file。更改memory\_limitpost\_max\_sizeupload\_max\_filesizedate.timezone按照您的VPS实例。

[PHP]
allow_url_fopen = On
always_populate_raw_post_data = -1
display_errors = Off
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
expose_php = Off
log_errors = On
memory_limit = 256M
output_buffering = 4096
post_max_size = 64M
register_argc_argv = Off
request_order = "GP"
upload_max_filesize = 64M
variables_order = "GPCS"
[Date]
date.timezone = America/New_York
[Session]
session.cache_limiter =
session.gc_divisor = 1000
session.hash_bits_per_character = 5
session.save_handler = files
session.save_path = "/opt/remi/php56/root/var/lib/php/session/"
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"

/opt/remi/php56/root/var/lib/php/session/目录的组所有权从apache组更改为h2o组。

sudo chown root.h2o /opt/remi/php56/root/var/lib/php/session/

创建PHP-FPM服务器日志所在的目录。

sudo mkdir /var/log/php-fpm/

启用并启动PHP-FPM服务器。

sudo systemctl enable php56-php-fpm 
sudo systemctl start php56-php-fpm

启用并启动H2O服务器。

sudo systemctl enable h2o
sudo systemctl start h2o

创建一个目录,其中默认index.php将驻留在file.dir上面的目录选项列出的目录中/var/www/www.example.com

sudo mkdir /var/www/www.example.com

index.php使用phpinfo命令测试PHP 创建默认值。

sudo nano /var/www/www.example.com/index.php

将下面的文本复制并粘贴到新index.php文件中。

<?php
phpinfo();
?>

现在,打开浏览器并输入example.com or www.example.com实例的服务器域名()。你收到Unable to connectThis site can’t be reached消息吗?CentOS的默认防火墙设置不允许到http端口的传入连接。执行以下操作以打开它。

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

在浏览器中刷新页面(F5),您将获得标准的PHP信息页面。


重定向http://example.comhttp://www.example.com以及https://www.example.comhttps://example.com(动态页面,PHP-FPM 7.1.x)配置

导航到该/etc/h2o/目录。

cd /etc/h2o/

将默认值重命名h2o.confh2o.conf.original

sudo mv h2o.conf h2o.conf.original

创建一个新h2o.conf文件。

sudo nano h2o.conf

将下面的文本复制并粘贴到h2o.conf文件中。

access-log: /var/log/h2o/access.log
compress: ON
error-log: /var/log/h2o/error.log
expires: 1 day
file.index: [ 'index.php' ]
hosts:
  "example.com:80":
    listen:
      port: 80
    paths:
      "/":
        redirect:
          status: 301
          url: "https://example.com/"
  "www.example.com:80":
    listen:
      port: 80
    paths:
      "/":
        redirect:
          status: 301
          url: "https://www.example.com/"
  "example.com:443":
    listen:
      port: 443
      ssl:
        <<: !file /etc/h2o/conf.d/ssl.conf
        certificate-file: /location/of/certificate/file/fullchain.ext
        key-file: /location/of/private/key/file/privkey.ext
    paths:
      "/":
        file.dir: /var/www/example.com
        header.add: "strict-transport-security: max-age=31536000; includeSubDomains; preload"
        redirect:
          internal: YES
          status: 307
          url: /index.php
  "www.example.com:443":
    listen:
      port: 443
      ssl:
        <<: !file /etc/h2o/conf.d/ssl.conf
        certificate-file: /location/of/certificate/file/fullchain.ext
        key-file: /location/of/private/key/file/privkey.ext
    paths:
      "/":
        header.add: "strict-transport-security: max-age=31536000; includeSubDomains; preload"
        redirect:
          status: 301
          url: "https://example.com/"
file.custom-handler:
  extension: .php
  fastcgi.connect:
    port: /run/php-fpm-7.1.sock
    type: unix
pid-file: /var/run/h2o/h2o.pid
send-server-name: OFF
setenv:
  HTTP_PROXY: ""
user: h2o

创建自定义目录以存储使用SSL的所有网站的默认SSL选项。

sudo mkdir conf.d

创建一个新ssl.conf文件。

sudo nano conf.d/ssl.conf

将下面的文本复制并粘贴到ssl.conf文件中。

cipher-preference: server
cipher-suite: ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
dh-file: /etc/ssl/h2o/dhparam_2048.pem

创建一个目录来存储dhparam_2048.pem将通过cronjob每天重新生成的文件。

sudo mkdir /etc/ssl/h2o/

创建一个新regenerate_dhparam文件。

sudo nano /etc/cron.daily/regenerate_dhparam

将以下文本复制并粘贴到regenerate_dhparam文件中。

#!/bin/bash
cd /etc/ssl/h2o
umask 022
for length in 2048
do
openssl dhparam -out dhparam_$length.tmp $length && mv dhparam_$length.tmp dhparam_$length.pem
chmod 444 dhparam_$length.pem
done

使bash文件刚刚创建可执行文件。

sudo chmod +x /etc/cron.daily/regenerate_dhparam

执行首次运行的bash脚本,因为如果未生成H2O,H2O将无法正常启动。首次运行时需要大约一两分钟才能生成。

sudo /etc/cron.daily/regenerate_dhparam

为了处理PHP,必须安装和配置PHP-FPM 7.1守护程序。为了安装比默认版本5.4.x更新的PHP-FPM版本,必须安装包含PHP版本5.6.x,7.0.x和7.1.x的REMI repo。在下面键入以下命令以安装PHP版本7.1.x.

sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
sudo yum install php71-php-fpm -y

导航到该/etc/opt/remi/php71/目录。

cd /etc/opt/remi/php71/

将默认值重命名php-fpm.confphp-fpm.conf.original

sudo mv php-fpm.conf php-fpm.conf.original

创建一个新php-fpm.conf文件。

sudo nano php-fpm.conf

将下面的文本复制并粘贴到php-fpm.conf文件中。

include=/etc/opt/remi/php71/php-fpm.d/*.conf
[global]
daemonize = yes
emergency_restart_threshold = 2
emergency_restart_interval = 1m
error_log = /var/log/php-fpm/php-fpm-7.1-error.log
pid = /var/run/php-fpm-7.1.pid
process_control_timeout = 10s

重命名目录中的默认www.conf文件php-fpm.d

sudo mv php-fpm.d/www.conf php-fpm.d/www.conf.original

创建一个新www.conf文件。

sudo nano php-fpm.d/www.conf

将以下文本复制并粘贴到www.conf文件中。pm.max\_children根据您的VPS实例更改您的CPU数量。

[www]
group = h2o
listen = /var/run/php-fpm-7.1.sock
listen.backlog = 65536
listen.owner = h2o
listen.group = h2o
pm = static
pm.max_children = 2
pm.max_requests = 10240
user = h2o

重命名默认php.ini文件。

sudo mv php.ini php.ini.original

创建一个新php.ini文件。

sudo nano php.ini

将以下文本复制并粘贴到新文件中php.ini file。更改memory\_limitpost\_max\_sizeupload\_max\_filesizedate.timezone按照您的VPS实例。

[PHP]
allow_url_fopen = On
always_populate_raw_post_data = -1
display_errors = Off
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
expose_php = Off
log_errors = On
memory_limit = 256M
output_buffering = 4096
post_max_size = 64M
register_argc_argv = Off
request_order = "GP"
upload_max_filesize = 64M
variables_order = "GPCS"
[Date]
date.timezone = America/New_York
[Session]
session.cache_limiter =
session.gc_divisor = 1000
session.hash_bits_per_character = 5
session.save_handler = files
session.save_path = "/var/opt/remi/php71/lib/php/session/"
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"

/var/opt/remi/php71/lib/php/session/目录的组所有权从apache组更改为h2o组。

sudo chown root.h2o /var/opt/remi/php71/lib/php/session/

创建PHP-FPM服务器日志所在的目录。

sudo mkdir /var/log/php-fpm/

启用并启动PHP-FPM服务器。

sudo systemctl enable php71-php-fpm 
sudo systemctl start php71-php-fpm

启用并启动H2O服务器。

sudo systemctl enable h2o
sudo systemctl start h2o

创建一个目录,其中默认index.php将驻留在file.dir上面的目录选项列出的目录中/var/www/example.com

sudo mkdir /var/www/example.com

index.php使用phpinfo命令测试PHP 创建默认值。

sudo nano /var/www/example.com/index.php

将下面的文本复制并粘贴到新index.php文件中。

<?php
phpinfo();
?>

现在,打开浏览器并输入您的实例的服务器域名(example.comwww.example.com)。你收到Unable to connectThis site can’t be reached消息吗?CentOS的默认防火墙设置不允许到http端口的传入连接。执行以下操作以打开它。

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

在浏览器中刷新页面(F5),您将获得标准的PHP信息页面。


重定向http://example.comhttp://www.example.com以及https://example.comhttps://www.example.com(动态页面,PHP-FPM 7.1.x)配置

导航到该/etc/h2o/目录。

cd /etc/h2o/

将默认值重命名h2o.confh2o.conf.original

sudo mv h2o.conf h2o.conf.original

创建一个新h2o.conf文件。

sudo nano h2o.conf

将下面的文本复制并粘贴到h2o.conf文件中。

access-log: /var/log/h2o/access.log
compress: ON
error-log: /var/log/h2o/error.log
expires: 1 day
file.index: [ 'index.php' ]
hosts:
  "example.com:80":
    listen:
      port: 80
    paths:
      "/":
        redirect:
          status: 301
          url: "https://example.com/"
  "www.example.com:80":
    listen:
      port: 80
    paths:
      "/":
        redirect:
          status: 301
          url: "https://www.example.com/"
  "example.com:443":
    listen:
      port: 443
      ssl:
        <<: !file /etc/h2o/conf.d/ssl.conf
        certificate-file: /location/of/certificate/file/fullchain.ext
        key-file: /location/of/private/key/file/privkey.ext
    paths:
      "/":
        header.add: "strict-transport-security: max-age=31536000; includeSubDomains; preload"
        redirect:
          status: 301
          url: "https://www.example.com/"
  "www.example.com:443":
    listen:
      port: 443
      ssl:
        <<: !file /etc/h2o/conf.d/ssl.conf
        certificate-file: /location/of/certificate/file/fullchain.ext
        key-file: /location/of/private/key/file/privkey.ext
    paths:
      "/":
        file.dir: /var/www/www.example.com
        header.add: "strict-transport-security: max-age=31536000; includeSubDomains; preload"
        redirect:
          internal: YES
          status: 307
          url: /index.php
file.custom-handler:
  extension: .php
  fastcgi.connect:
    port: /run/php-fpm-7.1.sock
    type: unix
pid-file: /var/run/h2o/h2o.pid
send-server-name: OFF
setenv:
  HTTP_PROXY: ""
user: h2o

创建自定义目录以存储使用SSL的所有网站的默认SSL选项。

sudo mkdir conf.d

创建一个新ssl.conf文件。

sudo nano conf.d/ssl.conf

将下面的文本复制并粘贴到ssl.conf文件中。

cipher-preference: server
cipher-suite: ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
dh-file: /etc/ssl/h2o/dhparam_2048.pem

创建一个目录来存储dhparam_2048.pem将通过cronjob每天重新生成的文件。

sudo mkdir /etc/ssl/h2o/

创建一个新regenerate_dhparam文件。

sudo nano /etc/cron.daily/regenerate_dhparam

将以下文本复制并粘贴到regenerate_dhparam文件中。

#!/bin/bash
cd /etc/ssl/h2o
umask 022
for length in 2048
do
openssl dhparam -out dhparam_$length.tmp $length && mv dhparam_$length.tmp dhparam_$length.pem
chmod 444 dhparam_$length.pem
done

使bash文件刚刚创建可执行文件。

sudo chmod +x /etc/cron.daily/regenerate_dhparam

执行首次运行的bash脚本,因为如果未生成H2O,H2O将无法正常启动。首次运行时需要大约一两分钟才能生成。

sudo /etc/cron.daily/regenerate_dhparam

为了处理PHP,必须安装和配置PHP-FPM 7.1守护程序。为了安装比默认版本5.4.x更新的PHP-FPM版本,必须安装包含PHP版本5.6.x,7.0.x和7.1.x的REMI repo。键入以下命令以安装PHP版本7.1.x.

sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
sudo yum install php71-php-fpm -y

导航到该/etc/opt/remi/php71/目录。

cd /etc/opt/remi/php71/

将默认值重命名php-fpm.confphp-fpm.conf.original

sudo mv php-fpm.conf php-fpm.conf.original

创建一个新php-fpm.conf文件。

sudo nano php-fpm.conf

将以下文本复制并粘贴到php-fpm.conf文件中。

include=/etc/opt/remi/php71/php-fpm.d/*.conf
[global]
daemonize = yes
emergency_restart_threshold = 2
emergency_restart_interval = 1m
error_log = /var/log/php-fpm/php-fpm-7.1-error.log
pid = /var/run/php-fpm-7.1.pid
process_control_timeout = 10s

重命名目录中的默认www.conf文件php-fpm.d

sudo mv php-fpm.d/www.conf php-fpm.d/www.conf.original

创建一个新www.conf文件。

sudo nano php-fpm.d/www.conf

将下面的文本复制并粘贴到www.conf文件中。pm.max\_children根据您的VPS实例更改您的CPU数量。

[www]
group = h2o
listen = /var/run/php-fpm-7.1.sock
listen.backlog = 65536
listen.owner = h2o
listen.group = h2o
pm = static
pm.max_children = 2
pm.max_requests = 10240
user = h2o

重命名默认php.ini文件。

sudo mv php.ini php.ini.original

创建一个新php.ini文件。

sudo nano php.ini

将以下文本复制并粘贴到新文件中php.ini file。更改memory\_limitpost\_max\_sizeupload\_max\_filesizedate.timezone按照您的VPS实例。

[PHP]
allow_url_fopen = On
always_populate_raw_post_data = -1
display_errors = Off
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
expose_php = Off
log_errors = On
memory_limit = 256M
output_buffering = 4096
post_max_size = 64M
register_argc_argv = Off
request_order = "GP"
upload_max_filesize = 64M
variables_order = "GPCS"
[Date]
date.timezone = America/New_York
[Session]
session.cache_limiter =
session.gc_divisor = 1000
session.hash_bits_per_character = 5
session.save_handler = files
session.save_path = "/var/opt/remi/php71/lib/php/session"
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"

/var/opt/remi/php71/lib/php/session/目录的组所有权从apache组更改为h2o组。

sudo chown root.h2o /var/opt/remi/php71/lib/php/session/

创建PHP-FPM服务器日志所在的目录。

sudo mkdir /var/log/php-fpm/

启用并启动PHP-FPM服务器。

sudo systemctl enable php71-php-fpm 
sudo systemctl start php71-php-fpm

启用并启动H2O服务器。

sudo systemctl enable h2o
sudo systemctl start h2o

创建一个目录,其中默认index.php将驻留在file.dir上面的目录选项列出的目录中/var/www/example.com

sudo mkdir /var/www/www.example.com

index.php使用phpinfo命令测试PHP 创建默认值。

sudo nano /var/www/www.example.com/index.php

将下面的文本复制并粘贴到新index.php文件中。

<?php
phpinfo();
?>

现在,打开浏览器并输入您的实例的服务器域名(example.comwww.example.com)。你收到Unable to connectThis site can’t be reached消息吗?CentOS的默认防火墙设置不允许到http端口的传入连接。执行以下操作以打开它。

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

在浏览器中刷新页面(F5),您将获得标准的PHP信息页面。


我的教程到此结束。谢谢阅读。

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权, 转载请注明出处。
文章名称:《在CentOS 7上安装H2O Web服务器》
文章链接:https://www.veidc.com/3001.html
【声明】:国外主机测评仅分享信息,不参与任何交易,也非中介,所有内容仅代表个人观点,均不作直接、间接、法定、约定的保证,读者购买风险自担。一旦您访问国外主机测评,即表示您已经知晓并接受了此声明通告。
【关于安全】:任何 IDC商家都有倒闭和跑路的可能,备份永远是最佳选择,服务器也是机器,不勤备份是对自己极不负责的表现,请保持良好的备份习惯。