如何在FreeBSD 11上使用Nginx和OpenSSL设置OwnCloud 9

时间:2020-03-05 15:29:34  来源:igfitidea点击:

OwnCloud是基于PHP和MySQL的免费和开源文件共享应用程序平台,它使我们能够创建自己的云存储平台。
免费版本的OwnCloud服务器是根据GNU AGPLv3许可证发布的,而企业版则是在OwnCloud商业许可证下发布的。
它是一个客户端-服务器体系结构软件,其中文件存储在服务器上,而客户端用于访问和共享文件。
OwnCloud的客户端可用于所有平台,从而可轻松管理和访问每个设备上的文件。
FreeBSD是一个基于BSD系统的免费和开源的类Unix操作系统。
与Linux不同,FreeBSD是从内核,设备驱动程序到userland实用程序的完整操作系统,而linux是带有设备驱动程序的内核。
Nginx是一个免费的开源Web服务器,因其速度以及平衡服务器负载和缓存的能力而广受欢迎。
它是在大量服务器中使用的最受欢迎的Web服务器和代理服务器之一。

当前,在撰写本文时,OwnCloud的最新版本是9.1.1,因此,我们将在新安装的FreeBSD 11服务器上执行其设置。

安装FEMP堆栈

FEMP Stack是Nginx Web服务器,MySQL/MariaDB数据库服务器和FreeBSD服务器中运行的PHP模块的组合。
FEMP是用于在服务器上托管和Web应用程序的广泛使用的堆栈之一。
其中我们将安装FEMP堆栈,以运行基于PHP的OwnCloud服务器。

安装Nginx Web服务器

为了安装Nginx,我们需要运行以下pkg命令,因为FreeBSD 11的默认软件包管理器是pkg。

% sudo pkg install nginx

安装MySQL数据库

然后,我们需要设置MySQL DB服务器,我们将其中存储OwnCloud实例的数据库。
要安装MySQL数据库服务器5.6版,我们需要在具有sudo或者root访问权限的终端或者控制台中执行以下命令。

% sudo pkg install mysql56-server

安装PHP 7.0模块

接下来,我们将安装所有必需的PHP 7.0模块,以便我们可以在FreeBSD 11计算机上运行基于PHP的应用程序OwnCloud服务器。
为了安装所需的PHP模块,我们需要运行以下命令。

% sudo pkg install php70 php70-mysqli php70-xml php70-gd php70-curl php70-zlib php70-zip php70-hash php70-tokenizer php70-extensions php70-pdo_mysql php70-openssl php70-gmp php70-ldap php70-exif php70-fileinfo php70-mbstring php70-bcmath php70-bz2 php70-mcrypt pecl-APCu pecl-intl

请注意,以上安装的模块是常用的php模块,而根据要求,我们可能需要安装其他模块。

安装完模块后,我们将通过执行以下命令将示例php配置(即/usr/local/etc/php.ini-production)复制到/usr/local/etc/php.ini。

% sudo cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

我们将使用文本编辑器(例如nano,vi)打开文件/usr/local/etc/php.ini,如下所示。

% sudo nano /usr/local/etc/php.ini

然后,我们将取消注释php.ini中的cig.fix_pathinfo行并将其值设置为0,以防止用户执行任意PHP代码。

cgi.fix_pathinfo=0

完成编辑后,我们将保存文件并退出文本编辑器。
接下来,我们将需要运行rehash命令以重新生成有关已安装的可执行文件的系统缓存信息。

% rehash

启用服务

现在,我们将执行以下sysrc命令,以启用nginx,php-fpm和mysql服务。
启用服务将在每次系统引导时自动运行相应的守护程序。

% sudo sysrc nginx_enable=yes mysql_enable=yes php_fpm_enable=yes

完成后,我们将通过运行以下命令来启动守护程序。

% sudo service nginx start
% sudo service mysql-server start
% sudo service php-fpm start

配置PHP-FPM

现在,我们需要将PHP-FPM配置为使用Unix套接字而不是网络端口进行通信,因为它比网络端口更安全。
为此,我们需要使用文本编辑器对php-fpm配置文件/usr/local/etc/php-fpm.d/www.conf进行少量更改。

% sudo nano /usr/local/etc/php-fpm.d/www.conf

然后,通过添加分号ie;对行listen = 127.0.0.1:9000进行注释。
前行。
完成后,我们将在其下方添加以下行。

listen = /var/run/php-fpm.sock

接下来,我们将通过删除分号as取消注释以下行。

listen.owner = www
listen.group = www
listen.mode = 0660

完成后,我们将保存文件并退出文本编辑器,然后通过运行以下命令重新启动PHP-FPM。

% sudo service php-fpm restart

配置MySQL

由于我们尚未为MySQL服务器的root用户设置任何密码,因此在这里我们将为其设置root密码。
为此,我们需要运行以下命令。

% sudo mysql_secure_installation

它将要求我们输入MySQL服务器的root密码,但是由于我们之前没有设置任何密码,因此只需按键盘上的Enter键即可。
然后,将要求我们为我们的MySQL根用户设置密码,在这里我们将点击Y并输入密码。
然后,我们只需点击键盘上的Enter按钮即可为其他设置设置默认值。

为OwnCloud创建数据库

由于我们已经成功配置了MySQL服务器,因此我们现在将为OwnCloud实例创建一个新数据库。
为此,我们首先需要通过运行以下命令登录mysql服务器的root用户。

% sudo mysql -u root -p

然后,将要求我们输入刚才设置的密码。
登录成功后,我们将欢迎我们进入MySQL控制台环境。
其中我们需要运行以下命令来创建数据库并为其设置用户和密码。

> CREATE DATABASE ownclouddb;
> CREATE USER ownclouduser@localhost IDENTIFIED BY 'Pa$$word123';
> GRANT ALL PRIVILEGES ON ownclouddb.* TO 'ownclouduser'@'localhost';
> FLUSH PRIVILEGES;
> EXIT;

其中在本教程中,我们将创建一个新数据库,用户和密码分别为ownclouddb,ownclouduser和Pa $$word123.

生成SSL证书

现在,我们将生成SSL证书,以便使用SSL证书对来自OwnCloud的流量进行加密。
我们甚至可以生成并获取SSL CA证书以获得更好的授权和安全性,但是在本教程中,我们将使用自签名SSL证书,该证书应该可以正常工作。
为此,我们将执行以下命令,这些命令将生成密钥和证书并将其存储在/usr/local/etc/nginx/cert /目录中。

% sudo mkdir -p /usr/local/etc/nginx/cert/
% cd /usr/local/etc/nginx/cert/
% sudo openssl req -new -x509 -days 365 -nodes -out /usr/local/etc/nginx/cert/owncloud.crt -keyout /usr/local/etc/nginx/cert/owncloud.key

输入上述最后一个命令后,将要求我们提供生成SSL证书所需的信息很少。
我们需要输入这些信息以继续进行。
完成后,将在所需目录中生成带有密钥文件的证书。
然后,我们需要确保证书和密钥只能由文件所有者访问。

% sudo chmod 600 *

下载和提取OwnCloud

现在,我们将在我们的计算机中下载最新版本的OwnCloud服务器。
我们可以从OwnCloud的官方下载页面获取最新版本。

在撰写本文时,OwnCloud的最新版本是9.1.1版,因此,我们将从上获得zip文件的链接,然后使用wget将其下载到我们的FreeBSD 11服务器中。
其中我们将压缩的zip文件下载到/tmp /目录,如下所示。

% cd /tmp/
% wget https://download.owncloud.org/community/owncloud-9.1.1.zip

下载完成后,我们将使用unzip命令提取压缩的zip文件。

% unzip owncloud-9.1.1.zip

接下来,默认情况下,我们将目录移动到Nginx的webroot上,即/usr/local/www /。

% sudo mv owncloud/ /usr/local/www/

之后,我们需要将owncloud文件和目录的所有权更改为www,以便Nginx将具有对OwnCloud的文件和目录的完全访问权限。
为此,我们需要执行以下命令。

% sudo chown -R www:www /usr/local/www/owncloud/

使用PHP-FPM配置Nginx

现在,我们将使用PHP-FPM配置Nginx Web服务器,以便我们可以在Web浏览器中运行OwnCloud。
为此,我们需要使用文本编辑器配置位于/usr/local/etc/nginx/nginx.conf的Nginx配置。

% sudo nano /usr/local/etc/nginx/nginx.conf

打开文本编辑器后,我们需要将用户值设置为www,并将worker_processes设置为配置计算机的CPU或者内核的数量。
可以通过在控制台中运行'sysctl hw.ncpu'进行检查。
然后,我们需要配置server {}块,如以下nginx配置所示。

user  www;
worker_processes  1; #No. of processors
error_log /var/log/nginx/error.log info;
events {
worker_connections  1024;
}
http {
include       mime.types;
default_type  application/octet-stream;
access_log /var/log/nginx/access.log;
sendfile        on;
keepalive_timeout  65;
server {
server_name cloud.theitroad.com www.cloud.theitroad.com;
listen 80;
return 301 https://$server_name$request_uri;
}
server {
listen  443 ssl;
server_name cloud.theitroad.com www.cloud.theitroad.com;
root /usr/local/www/owncloud/;
index index.php index.html index.htm;
# Adding our self-signed SSL Certificate.
ssl_certificate /usr/local/etc/nginx/cert/owncloud.crt;
ssl_certificate_key /usr/local/etc/nginx/cert/owncloud.key;
# Add headers to serve security related headers
add_header Strict-Transport-Security "max-age=15768000;includeSubDomains; preload;";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
# The following 2 rules are only needed for the user_webfinger app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
location /.well-known/acme-challenge { }
# set max upload size
client_max_body_size 512M;
fastcgi_buffers 64 4K;
# Disable gzip to avoid the removal of the ETag header
gzip off;
# Uncomment if your server is build with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed off;
error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;
location/{
rewrite ^ /index.php$uri;
}
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/{
return 404;
}
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
return 404;
}
location ~
^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/)
{
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice
fastcgi_param front_controller_active true;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
location ~ ^/(?:updater|ocs-provider)(?:$|/) {
try_files $uri $uri/=404;
index index.php;
}
# Adding the cache control header for js and css files
# Make sure it is BELOW the PHP block
location ~* \.(?:css|js)${
try_files $uri /index.php$uri$is_args$args;
add_header Cache-Control "public, max-age=7200";
# Add headers to serve security related headers (It is intended to have those duplicated to the ones above)
# Before enabling Strict-Transport-Security headers please read into this topic first.
#add_header Strict-Transport-Security "max-age=15552000;includeSubDomains";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
# Optional: Don't log access to assets
access_log off;
}
location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)${
try_files $uri /index.php$uri$is_args$args;
# Optional: Don't log access to other assets
access_log off;
}
}
}

配置并保存配置后,我们需要确保我们的配置文件没有任何语法错误。
通过执行以下命令,我们可以知道这一点。

% sudo nginx -t

如果我们的配置没问题,那么我们将重启我们的nginx服务器。
我们可以通过运行以下命令来重启nginx服务器。

% sudo service nginx restart

安装OwnCloud

如果以上各项均按预期设置,我们现在应该能够访问OwnCloud Installer的Web界面。
为了访问,我们需要打开我们最喜欢的Web浏览器并将地址指向https://ip-address /或者https://cloud.theitroad.com/。
如果我们使用的是自签名SSL证书,则会在网络浏览器中看到一条警告,如下所示。
在运行Firefox时,我们需要先单击“高级”,然后单击“添加例外”并确认证书。

然后,我们将欢迎我们进入OwnCloud Web Installer,其中我们需要为OwnCloud Administrator用户设置登录详细信息。
接下来,我们需要单击“存储和数据库”,其中选择MySQL/MariaDB,因为我们已经在上面设置了MySQL。

然后,我们需要在创建新数据库时输入我们在上面设置的数据库登录信息。
完成后,我们将直接进入OwnCloud的文件存储仪表板。