如何在FreeBSD 11上使用Nginx和OpenSSL设置OwnCloud 9
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的文件存储仪表板。