在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创建一个组和用户以在named下运行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版本,必须安装REMI存储库,其中包含PHP 5.6.x,7.0.x和7.1.x版本。安装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.phpfile.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版本,必须安装REMI存储库,其中包含PHP 5.6.x,7.0.x和7.1.x版本。键入以下命令以安装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.phpfile.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版本,必须安装REMI存储库,其中包含PHP 5.6.x,7.0.x和7.1.x版本。在下面键入以下命令以安装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.phpfile.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();
?>

Now, open your browser and enter the server domain name (example.com or www.example.com) for your instance. Are you getting an Unable to connect or a This site can’t be reached message? CentOS's default firewall setting disallows incoming connections to the http port. Do the following to open it.

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

Refresh the page in your browser (F5) and you will get the standard PHP info page.


Redirect http://example.com To http://www.example.com (Dynamic Page, PHP-FPM 7.1.x) Configuration

Navigate to the /etc/h2o/ directory.

cd /etc/h2o/

Rename the default h2o.conf to h2o.conf.original.

sudo mv h2o.conf h2o.conf.original

Create a new h2o.conf file.

sudo nano h2o.conf

Copy and paste the text below into the h2o.conf file.

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版本,必须安装REMI存储库,其中包含PHP 5.6.x,7.0.x和7.1.x版本。在下面键入以下命令以安装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.phpfile.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

Copy and paste the following text into the ssl.conf file.

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

Make a directory to store the dhparam_2048.pem file that will be regenerated daily via a cronjob.

sudo mkdir /etc/ssl/h2o/

Create a new regenerate_dhparam file.

sudo nano /etc/cron.daily/regenerate_dhparam

Copy and paste the following text into the regenerate_dhparam file.

#!/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

Make the bash file just created executable.

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

Execute the bash script for a first run as H2O won't start properly if it's not generated. This will take about a minute or two to generate on first run.

sudo /etc/cron.daily/regenerate_dhparam

Enable and start the H2O server.

sudo systemctl enable h2o
sudo systemctl start h2o

Create a default index.html using the template in /var/www/html to the directory option file.dir listed above in /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,它将无法正确启动。第一次运行大约需要一两分钟的时间。

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,它将无法正确启动。第一次运行大约需要一两分钟的时间。

sudo /etc/cron.daily/regenerate_dhparam

为了处理PHP,必须安装和配置PHP-FPM 5.6守护程序。为了安装比默认5.4.x更高的PHP-FPM版本,必须安装REMI存储库,其中包含PHP 5.6.x,7.0.x和7.1.x版本。键入以下命令以安装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.phpfile.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,它将无法正确启动。第一次运行大约需要一两分钟的时间。

sudo /etc/cron.daily/regenerate_dhparam

In order to process PHP, the PHP-FPM 5.6 daemon must be installed and configured. In order to install a version of PHP-FPM newer than the default 5.4.x, the REMI repo must be installed which contains PHP versions 5.6.x, 7.0.x and 7.1.x. Type the following commands to install PHP version 5.6.x.

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

Navigate to the /opt/remi/php56/root/etc/ directory.

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

Rename the default php-fpm.conf to php-fpm.conf.original.

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

Create a new php-fpm.conf file.

sudo nano php-fpm.conf

Copy and paste the text below into the php-fpm.conf file.

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

Rename the default www.conf file in the php-fpm.d directory.

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

Create a new www.conf file.

sudo nano php-fpm.d/www.conf

Copy and paste the text below into the www.conf file. Change your pm.max\_children to match the number of CPUs in accordance with your VPS instance.

[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

Rename the default php.ini file.

sudo mv php.ini php.ini.original

Create a new php.ini file.

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.phpfile.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,它将无法正确启动。第一次运行大约需要一两分钟的时间。

sudo /etc/cron.daily/regenerate_dhparam

为了处理PHP,必须安装和配置PHP-FPM 7.1守护程序。为了安装比默认5.4.x更高的PHP-FPM版本,必须安装REMI存储库,其中包含PHP 5.6.x,7.0.x和7.1.x版本。在下面键入以下命令以安装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.phpfile.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,它将无法正确启动。第一次运行大约需要一两分钟的时间。

sudo /etc/cron.daily/regenerate_dhparam

为了处理PHP,必须安装和配置PHP-FPM 7.1守护程序。为了安装比默认5.4.x更高的PHP-FPM版本,必须安装REMI存储库,其中包含PHP 5.6.x,7.0.x和7.1.x版本。键入以下命令以安装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.phpfile.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信息页面。


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



如何在CentOS 7上安装Oxwall

如何在CentOS 7上安装Oxwall

Oxwall是一个开源社交网络软件平台,可用于免费构建自定义社交网站(SNS)。在这篇文章中,

如何在CentOS 7上设置vsFTPd

如何在CentOS 7上设置vsFTPd

FTP是用于通过Internet传输文件的有用协议,本指南将向您展示如何设置vsFTPd(非常安全的文件传输协议守护程序)o

使用Nethogs监视网络带宽使用情况

使用Nethogs监视网络带宽使用情况

在本教程中,我们将介绍在CentOS 6x x64上安装和使用nethogs的过程。nethogs是一种网络监视工具,它允许Networ

如何在CentOS 7上安装BoltWire CMS

如何在CentOS 7上安装BoltWire CMS

使用其他系统?简介BoltWire是一个用PHP编写的免费,轻量级的内容管理系统。与大多数其他内容管理人员相比

在CentOS 6上设置SA-MP San Andreas多人服务器

在CentOS 6上设置SA-MP San Andreas多人服务器

欢迎来到另一个Vultr教程。在这里,您将学习如何安装和运行SAMP服务器。本指南是为CentOS 6编写的。先决条件

使用Etckeeper进行/ etc的版本控制

使用Etckeeper进行/ etc的版本控制

简介/ etc /目录在Linux系统运行中起着至关重要的作用。其原因是因为几乎每个系统配置

如何在CentOS 7上安装Microweber

如何在CentOS 7上安装Microweber

使用其他系统?Microweber是一个开放源代码的拖放式CMS和在线商店。Microweber源代码托管在GitHub上。本指南将向您展示

如何在CentOS 7上安装SonarQube

如何在CentOS 7上安装SonarQube

使用其他系统?SonarQube是用于质量系统开发的开源工具。它是用Java编写的,并且支持多个数据库。它提供

如何在CentOS 7上使用Mosh进行远程服务器管理

如何在CentOS 7上使用Mosh进行远程服务器管理

使用其他系统?Mosh是Mobile Shell的缩写,是一种新兴的远程终端应用程序,旨在提供更好的连接和使用

如何在CentOS 7上安装MoinMoin

如何在CentOS 7上安装MoinMoin

MoinMoin是一个使用Python编写的基于文件系统的开源Wiki引擎。如今,MoinMoin已广泛用于开源社区。许多供应商

如何在Debian,CentOS和FreeBSD上使用Sudo

如何在Debian,CentOS和FreeBSD上使用Sudo

在Linux和Unix系统管理员中,使用sudo用户访问服务器并在root级执行命令是一种非常普遍的做法。使用泡沫

如何在Ubuntu 16.10上安装Countly Analytics

如何在Ubuntu 16.10上安装Countly Analytics

使用其他系统?Countly是一个开源Web /移动分析和营销平台。它具有许多用于从Web收集数据的功能

如何在CentOS 7上安装MODX CMS和Nginx

如何在CentOS 7上安装MODX CMS和Nginx

MODX是一个用PHP编写的免费开放源内容管理系统。它使用MySQL或MariaDB来存储其数据库。MODX专为满足以下条件的企业而设计:

如何在CentOS 7 LAMP VPS上安装Lychee 3.1相册

如何在CentOS 7 LAMP VPS上安装Lychee 3.1相册

使用其他系统?Lychee 3.1相册是一种简单,灵活,免费和开源的照片管理工具,可在VPS服务器上运行。安装

如何在CentOS 7上安装ERPNext开源ERP

如何在CentOS 7上安装ERPNext开源ERP

使用其他系统?ERP或企业资源计划是用于管理核心业务流程的企业应用程序套件。ERPNext是免费的

如何在CentOS 7 LAMP VPS上安装Paste 2.1

如何在CentOS 7 LAMP VPS上安装Paste 2.1

使用其他系统?Paste 2.1是一个简单,灵活,免费和开源的pastebin应用程序,用于存储代码,文本等。最初是

如何在CentOS 7上安装Seafile Server

如何在CentOS 7上安装Seafile Server

使用其他系统?Seafile(社区版本)是一个免费和开源的文件同步和共享解决方案,类似于ownCloud。机智

如何在CentOS 7上安装Kolab组件

如何在CentOS 7上安装Kolab组件

使用其他系统?Kolab Groupware是一个免费的基于Web的开源组件软件。它的功能包括电子邮件通信,事件

如何在CentOS 7 LAMP VPS上安装Omeka Classic 2.4 CMS

如何在CentOS 7 LAMP VPS上安装Omeka Classic 2.4 CMS

使用其他系统?Omeka Classic 2.4 CMS是一个免费的开源数字发布平台和用于共享数字内容的内容管理系统(CMS)

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

什麼是日誌文件系統,它是如何工作的?

什麼是日誌文件系統,它是如何工作的?

我們的計算機以稱為日誌文件系統的有組織的方式存儲所有數據。這是一種有效的方法,可以讓計算機在您點擊搜索時立即搜索和顯示文件。 https://wethegeek.com/?p=94116&preview=true

技術奇點:人類文明的遙遠未來?

技術奇點:人類文明的遙遠未來?

隨著科學的快速發展,接管了我們的大量工作,我們陷入無法解釋的奇點的風險也在增加。閱讀,奇點對我們意味著什麼。

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

2021 年人工智能對醫療保健的影響

2021 年人工智能對醫療保健的影響

過去幾十年,醫療保健領域的人工智能取得了巨大飛躍。因此,醫療保健中人工智能的未來仍在日益增長。