唔,想了想,我好像在OwnCloud还是6.x版本的时候就在用了,现在是10.x了,而NextCloud是12.x,为什么要把两者放在一起提呢?这个的话,明眼人一看就觉得两者从很多方面来说都很像,甚至……连官方的安装下载页面都几乎一样。这是因为两者本就是同根而生的,NextCloud的主要开发者都是OwnCloud的开发者(曾经的),这个也算当初开源界的一个大事件了,OwnCloud的部分元老级员工离开创建了NextCloud,而OwnCloud则突然宣告破产并成立了新公司,原因众说纷纭,但是真正是什么个情况我们就不得而知了。
说实在话无论是NextCloud还是OwnCloud,在安装上其实是不难的,特别如果是用Apache的情况下,由于存在.htaccess文件,所以不用额外配置Rewrite规则,不过嘛,我这次当然得挑Nginx的环境来说咯,毕竟我常用的就是Nginx,而且顺便记录下伪静态规则,方便以后拿来用。对了,我还会在文末提下一些额外的调优以及一个曾经碰到过的疑难杂症的解决方法。
一.安装
安装的话我选择的是OneInStack的LNMP环境,官方推荐的环境如下
(当然,其实OwnCloud有个通过各系统软件仓库安装的办法,貌似NextCloud没搞,但是除非你这台机器不作他用,不然这样的方法太"dirty"了)
- Red Hat Enterprise Linux 7 / Ubuntu 16.04 LTS
- MySQL/MariaDB
- PHP 7.0 +
- Apache 2.4 with mod_php
不过我们今天要用的可不是Apache,需要注意下,强烈建议使用PHP7,性能提高了很多(因为NextCloud的前身OwnCloud在我之前的使用中来说,PHP5.6下跑是真的好慢_(:з」∠)_)
这边有个小坑,在官方文档中也有说明,那就是对MySQL的配置有所要求,原文如下
- Disabled or BINLOG_FORMAT = MIXED configured Binary Logging (See: MySQL / MariaDB with Binary Logging Enabled)
- InnoDB storage engine (MyISAM is not supported)
- “READ COMMITED” transaction isolation level (See: Database “READ COMMITED” transaction isolation level)
翻译一下,就是要修改或者关闭二进制日志,启用InnoDB(不能用MyISAM哦,我之前有次没注意,然后就在安装向导那各种报错),第三个是对事务隔离级别有所要求 (OneInStack这边默认就满足了)
安装的话基础的就不说了,利用vhost.sh来创建网站,然后我们可以选择下载Archive File或者Web Installer
https://download.nextcloud.com/server/releases/nextcloud-12.0.0.zip
https://download.nextcloud.com/server/installer/setup-nextcloud.php
两者其实都行,不过如果你的机器在国内的话我建议前者,甚至最好先下载到本地然后上传上去,不然以国内机器的网络情况来说,在线下载很容易出问题的
解压到你创建网站时提示的目录,然后修改下所有者,OneInStack这边是www:www ,所以在网站目录chown -R www:www * 就行,接着访问你之前配置的域名(前提得是你解析好了)
全中文,自己填,为了安全建议数据目录和网站目录分开,当然请记得把数据目录的所有者改了,不然会无法写入
然后,安装完成,是的,你会看到"No input file specified." 2333,这是因为我们没有配置伪静态,下面我们就修改下Nginx的vhost配置,配置文件路径在创建网站时会告诉你
#(可选)添加如下header主要为了安全 add_header X-Content-Type-Options nosniff; 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; #(可选)为了支持user_webfinger 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; } #设置上传文件的最大大小(还和php里的那个设置有关) client_max_body_size 512M; fastcgi_buffers 64 4K; #最主要的,将所有请求转发到index.php上 location / { rewrite ^ /index.php$uri; } #安全设置,禁止访问部分敏感内容 location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ { deny all; } location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { deny all; } #这部分吧,默认就有,不过有所不同,所以我合并了下,替换原来的就行 location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) { fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param modHeadersAvailable true; fastcgi_param front_controller_active true; fastcgi_pass unix:/var/run/php-cgi.sock; #这边我改过,参照原来的 fastcgi_intercept_errors on; fastcgi_request_buffering off; include fastcgi.conf; } #安全设置,禁止访问部分敏感内容 location ~ ^/(?:updater|ocs-provider)(?:$|/) { try_files $uri/ =404; index index.php; } location ~ \.(?:css|js|woff|svg|gif)$ { try_files $uri /index.php$uri$is_args$args; add_header Cache-Control "public, max-age=15778463"; add_header X-Content-Type-Options nosniff; 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; access_log off; } location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ { try_files $uri /index.php$uri$is_args$args; access_log off; }
把这儿配置完,重启Nginx,然后刷新刚才的错误页,我们就能进入正常的页面了
到这儿基础的安装其实已经结束了,下面是部分调优和疑难杂症老中医
二.优化
点击右上角齿轮进入管理界面,默认情况下我们会看到这些(在OneInStack环境下,且没选择开启Opcache),我的建议是缺啥补啥,但是,安装完Opcache后它又会报错
“PHP 被设置为移除内联块, 这将导致多个核心应用无法访问.
这可能由缓存/加速器导致的, 例如 Zend OPcache 或 eAccelerator.”
这是因为我们还要对php.ini中Opcache的参数进行修改,改成下方的就行(OneInStack的相关参数被拆分出来了,在/usr/local/php/etc/php.d/ext-opcache.ini 中)其它可以不用改,主要是那个opcache.save_comments=1 ,因为默认是0,改完重启php-fpm就行
顺手把fileinfo模块装了(用addon.sh就行),然后我们还需要配置下内存缓存,这个的话NextCloud支持的种类还是不少的,有APU、Memcached以及Redis
具体说明——>传送门
其实吧,官方推荐APU或者Redis,最方便的是APU了,至于你们喜欢啥那随意咯,下面给出一些配置的栗子,都需要修改config目录中的config.php才行
①APU
在配置文件中添加如下
'memcache.local' => '\OC\Memcache\APCu',
②Memcached
在配置文件中添加如下,这个是多个Memcached实例,单个自己改 (因为这货不能数据持久化,所以真的不推荐
'memcache.local' => '\OC\Memcache\APCu', 'memcache.distributed' => '\OC\Memcache\Memcached', 'memcached_servers' => array( array('localhost', 11211), array('server1.example.com', 11211), array('server2.example.com', 11211), ),
③Redis
在配置文件中添加如下,这个是通过TCP连接的
'memcache.local' => '\OC\Memcache\Redis', 'redis' => array( 'host' => 'localhost', 'port' => 6379, ),
还有性能更好的UNIX连接
'memcache.local' => '\OC\Memcache\Redis', 'redis' => array( 'host' => '/var/run/redis/redis.sock', 'port' => 0, 'dbindex' => 0, 'password' => 'secret', 'timeout' => 1.5, ),
同时,官方还推荐加入如下,来用于存储文件锁
'memcache.locking' => '\OC\Memcache\Redis',
还有个要改的地方就是Cron了,默认的Cron是AJAX的,效率不行,建议改成系统Cron任务
#-u是用于指定这个crontab是www用户的 crontab -u www -e #这儿建议php使用完整路径,另外要改下cron.php的路径为你自己的 */15 * * * * php -f /var/www/nextcloud/cron.php
搞到这儿,那真的是差不多了,唯一一个要提的是
请记得在解压NextCloud程序并转移文件的时候注意.htaccess .user.ini这俩,前者在Nginx下倒是不重要,后者请务必注意,因为这个是用于覆盖php.ini配置的,便于OwnCloud调整上传文件的大小,如果没有这个,在之前的Nginx部分你修改了那个最大大小是没有用的,还是会被php.ini中的限制住
文章评论
博主想请教个问题,我也要用的linuxeye的一键包安装的环境。但是配置完成访问nextcloud时,/index.php/apps/files/ 这个url 404 提示 No input file specified.
关于Nginx PHP部分的配置
location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) {
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
include fastcgi.conf;
}
@Qa 你这个还是rewrite规则的问题,我觉得你可能少了下面这段,这个需要放到所有的location前面,以确保优先级。作用就是把所有的请求转发到index.php处理,少了这个就会404
location / {
rewrite ^ /index.php$uri;
}
@Senra 感谢回复,我想我添加了这些规则。按照上面的教程。
完整的配置
https://ws1.sinaimg.cn/large/ec76730dgy1fg2az2sfdqj211b14qq7q.jpg
@Senra 网络好像卡了,评论修改错误。麻烦手动修改下
感谢回复,我想我添加了这些规则。按照上面的教程。
我突然发现了问题所在,一个被忽略的小问题。nginx下#是注释。而//不行。重载nginx默认不会显示错误,我没有使用nginx -t去排查。
@Qa 是的……nginx下需要#,所以我在文章中的那个不算是直接可以贴到配置文件中的,我用的OIS的nginx重载会自动检测配置文件是否正确,所以也没在意你这个问题_(:з」∠)_
location ~ \.(?:css|js|woff|svg|gif)$ {
~~~~~
add_header X-Frame-Options SAMEORIGIN;
}
同源貌似必须加到这一段里才能通过安全验证。
我习惯include xxx.conf的形式,方便hsts这些个性化配置。
解决之前花式重启N遍还是在警告我,加到nginx全局或者非此location段都无法过关。
这是什么检测原理。
@1v9 额,这个我其实没太注意,因为我貌似没遇到啥问题_(:з」∠)_,include常用重复配置挺好的,不过写教程还是贴全的比较合适所以也没搞啥花样
通过nextcloud上传到里面的txt中内容中文都是乱码,名称的中文倒是能正常显示
不过查看本地存储目录通过其他方式下载的,中文却都正常
@apexes 乱码是只在网页上查看乱码还是上传后下载下来乱码? 前者可能是浏览器识别编码错误,后者可能需要考虑给服务器安装中文支持yum groupinstall "Chinese Support"
@Senra 我查了下,原来是编码的问题,Linux 默认的是 utf-8 的
windows中创建的 txt 文件默认是 gbk(ANSI)
另存为就解决了。。
大神厉害~找了好久nginx的配置,正在get中!很用心很详细的解释~!
为什么,我不是中这个版本的nextcould安装后默认是英文,不是中文界面在config配置'force_language' => "zh_CN",好像也没用
@black 额,这个没碰到过,你可以试试这个https://docs.nextcloud.com/server/12/admin_manual/configuration_server/language_configuration.html
当然你也可以直接右上角头像——>第一个个人设置——>语言 改成简体中文
我就是看了你说的这个地址,按照那个配置,但是发现还是不行,不知道为什么你那个是中文版的
您好,我用nginx整体安装好以后,全部都正常,配置腾讯云ssl后Android客户端也正常登陆,但ios客户端始终无法登陆,提示“连接错误,未能完成该操作。协议错误”,请问如何解决啊?
@derek 我自己试过ios没问题啊。。。你可以用ssllab检测下你ssl是否配置完全证书链
https://tieba.baidu.com/p/5525451178
碰到这个样类似的问题请问怎么解决
@thee 确定你在安装过程中没有发生错误,我之前碰到过数据库没有开启innodb导致没有数据库初始化没有完成,但是程序已经判定为安装完成,这种情况下无法正常使用。如果你发生这种情况可以尝试重新安装切换为sqlite模式然后查看是否正常。另外也可能是你浏览器自动填充了错误的密码
@Senra 谢谢!
你好,centos7,安装的oneinstsck的LNMP,开始都正常,数据区在aliyun的OSS,在创建用户界面设置好后,等大约三分钟左右,出现502,在OSS文件夹查看过,已出现了部分安装文件,请问这个可能是哪里的问题,需要在哪里查找,谢谢。
@leon-l 额,我建议你安装在正常的目录里,然后把oss挂载到数据目录中的某个目录,试试这样会不会出问题,同时确认你的数据库是否启用了innodb,或者尝试使用SQLite安装。另外你可以检查下PHP的错误日志
你好,请nginx怎么把链接中的index.php去掉呢,用的宝塔面板装的LNMP。看到其他的教程都是Apache的,官方的文档看的也不是很懂
@秦 1.首先需要伪静态(本教程中提到了,把请求转发到index.php那段)
2.在config.php中添加类似这样的(和Apache教程一样)
'htaccess.RewriteBase' => '/'
@Senra 谢谢答复,这两个我都改了,但是好像还是不起作用,我是直接全部用的你的nginx伪静态内容替换的站点伪静态规则,另外还有一个信息就是我的Nextcloud是直接安装在根目录下的,没有用它默认的nextcloud二级目录,不知道是不是这个原因?找了各种方法尝试都还是不成功
@Senra 谢谢答复,这两个我都改了,但是好像还是不起作用,我是直接全部用的你的nginx伪静态内容替换的站点伪静态规则,另外还有一个信息就是我的Nextcloud是直接安装在根目录下的,没有用它默认的nextcloud二级目录,不知道是不是这个原因?找了各种方法尝试都还是不成功。
@秦 官方在完整版的配置文件中已经说明了.
config/config.sample.php第473行:
After setting this value run ` occ maintenance:update:htaccess ` .
@非洲企鹅 这个会更新Apache的.htaccess文件,但是对于Nginx来说还是需要手动去配置
@非洲企鹅 这个是Apache的设置,nginx就没,所以下次用Apache装算了
群主,你是高手、见多识广,请问能不能推荐一个类似百度网盘后台的开源解决方案。因为我自己做了一个功能比较强的网盘,打算商业化,后台系统如果搞单机服务的没有任何任何问题。但我想搭建类似百度网盘的分布式后台系统,请问能不能推荐一下呢。注意,这个后台最好包括两方面的内容,即数据库分布式和文件分布式。也就是一部分文件和一部分数据库内容,存在不同的机子上,但在使用的时候,能让它们汇总使用。实在不行、最起码也要让分布式文件系统可以正确工作。万分感谢!!
你好我想请问一下,我是lamp环境下安装的,安装完毕后ios和win10使用都没有问题。过了一段时间后网页端清理了缓存,就进不了登陆界面了。直接报500服务器错误,而ios端任然可以正常的使用。请问可能是什么地方出了问题?
@羊群 这个有点奇怪啊,你换个浏览器看看,不行重启下服务端的php试试
@Senra 这些都试过了,我查后台的日志文件基本都是报这个错误Exception\":\"OCP\\\\Files\\\\NotPermittedException\",\"Message\":\"No create permission for path\" Trace\":\"#0 \\\/var\\\/www\\\/html\\\/nextcloud\\\/lib\\\/private\\\/Files\\\/SimpleFS\\\/SimpleFolder.php(83): OC\\\\Files\\\\Node\\\\Folder->newFile('merged-login.js')\\n#1 \\\/var\\\/www\\\/html\\\/nextcloud\\\/lib\\\/private\\\/Template\\\/JSCombiner.php(146):。。。后面太长就不贴了, 可是我apache用户的权限早就已经都开启了,不然其他记住了cookie的客户端也不会全都可以正常上传下载了,诶。。。
@羊群 这是没有权限啊。。。你直接在nextcloud的父目录对文件夹递归修改所有者试试
ios客户端刷新文件速度要慢于访问网页端,不知道啥原因
@cloud 如果说的是刷新文件这个操作需要一定时间的延迟后才会显示新文件的话可能是你缓存的问题。如果单纯是这个操作运行的慢的话可能是你PHP版本低、内存不足、设置的PHP内存或者超时等不合适
“数据目录和网站目录分开,当然请记得把数据目录的所有者改了,不然会无法写入“
这里所有者指的是什么,我试了www:www,chmod 777,结果都是“无法创建或写入数据目录“。
CentOS 6.9, PHP 7.2, nextcloud 15
@青鸟千秋 最终只有在网站目录下能够正常创建并使用,但是这样就不能自动升级了
@青鸟千秋 自动升级功能需要你确保
1.没有启用open_basedir或为open_basedir指定合适的目录
2.你为下载升级文件的目录配置了合适的权限
@青鸟千秋 所有者为你运行php的用户
我安装的nextcloud 15的版本 nginx +php7.1+pathinfo (军哥的一键脚本环境)
伪静态写这条
location / {
rewrite ^ /index.php$uri;
}
首页是没用的, https://xxx.com/index.php/apps/files/?dir=/&fileid=7
即使手动去掉index.php,https://xxx.com/apps/files/?dir=/&fileid=7!也会跳转回index.php的
像 https://xxx.com/index.php/settings/user 手动去掉index.php,https://xxx.com/settings/user 是可以正常使用的!!
全网Google了也没找到解决办法,呜呜~ 写于2019.3.31
不知道大家和楼主有没有以下情况:
1.打开首页进入刷新太慢,体验效果很不好。一开始以为是数据库在挂载的数据目录里导致的,最后搞成mysql单独配置数据库,首页进去还是很慢,不知博主有没有高见【抱拳】?
2.视频插件只支持mp4格式在线播放嘛?大家有其他播放需求吗?代码里是
mimeTypes : [
'video/mp4',
'video/x-m4v',
'video/webm',
'video/x-flv',
'video/ogg',
'video/x-msvideo',
'video/quicktime',
'video/x-ms-wmv',
'video/x-matroska'
],
mimeTypeAliasses: {
'video/x-msvideo': 'video/mp4', //avi
'video/quicktime': 'video/mp4', //mov
'video/x-ms-wmv': 'video/mp4', //以上3行是自己加的,但是只能播放MOV。。。
'video/x-matroska': 'video/webm' // mkv support for Chrome. webm uses the same container format
},
3.据说是PHP高手自己弄的框架完成的这个nextcloud,想二次开发,改页面需求,发现JS好烦。。。。
问题有点多,请见谅
楼主,怎么限制nextcloud上传单个文件的大小呀,修改nginx、php里面的参数都不生效,还是各种大小的文件都能上传,我用的是nextcloud 16.0.8的版本,求解
你好,咨询个问题啊,新的版本创建数据库都是默认utf8mb4编码的,这样的话建立中文文件夹分享给别人的话,就会出现不识别的错误,就是被分享人看到的文件夹是个类似于(2)(3)这样的,而不是原本的中文名称,不知道有没有遇到这个情况?