Nginx反向代理Nextcloud并配置HTTPS访问

Linux, 容器
Nginx反向代理Nextcloud并配置HTTPS访问-下一朵云

Nextcloud的前期容器部署请参考 《docker-compose部署私有云盘nextcloud教程》

本文是在Nextcloud可以通过HTTP正常访问的情况下,通过nginx反向代理并配置启用HTTPS访问

注意:将本文Nginx的配置、Nextcloud的配置中的域名由本文的示例 p.hvz.cc 替换为你自己的域名。

一、配置系统环境

(1)nginx-1.22.0

nginx-1.22.0.tar.gz 下载地址:

https://cloud.189.cn/t/Qje2iyiIjmEr (访问码:1cy0)

(2)SSL证书

SSL单域名证书,国内的域名注册商均可免费申请,或者在freessl.cn申请(有效期一年,到期重新申请续期),或者参考本站文章《如何使用acme.sh与阿里云DNS自动签发Let’s Encrypt的免费数字证书》配置自动签发。

本文以域名:https://p.hvz.cc 为示例,SSL证书已在注册商申请,申请教程略。

二、安装Nginx

(1)安装 gcc、PCRE pcre-devel、zlib、openssl

yum install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel -y

(2)将 nginx-1.22.0.tar.gz 上传到 ~ 目录并解压缩

tar -zxvf nginx-1.22.0.tar.gz 
cd  nginx-1.22.0

(3)配置

./configure --prefix=/usr/local/nginx --with-http_ssl_module

配置完成后,如图1

Nginx反向代理Nextcloud并配置HTTPS访问-下一朵云
图1 配置完成

(4)编译安装

make && make install

执行上述命令后,等待安装完成

(5)启动、停止、重载配置

暂时先不要启动Nginx,修改配置文件后再启动,因为80端口被《docker-compose部署私有云盘nextcloud教程》中的容器占用,启动会报错:80端口被占用。

cd /usr/local/nginx/sbin/
./nginx #启动
./nginx -s stop #停止
./nginx -s quit #强制退出
./nginx -s reload #重载配置

三、Nginx配置文件

已配置好的配置文件下载地址:https://cloud.189.cn/t/3yaIrqYni6re (访问码:osj3)
可下载后直接覆盖上传,省略此步骤中的操作

执行以下命令:

cat /dev/null > /usr/local/nginx/conf/nignx.conf
vi /usr/local/nginx/conf/nignx.conf

按“i”键进入插入模式,将如下配置内容复制进去,然后再按“Esc”键进入命令模式,输入 :wq 保存


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8080;
        server_name  localhost;

        #charset koi8-r;

        access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
  }
    server {
        listen       443 ssl;
        server_name  p.hvz.cc;

        access_log  logs/01.log  main;
        error_log  logs/01error.log;	

        ssl_certificate      cert01.pem;
        ssl_certificate_key  cert01.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" always;

        location / {
            proxy_pass http://127.0.0.1:80;  
            proxy_set_header Host $host:$server_port;
            client_max_body_size 4096m;
        }
        location /.well-known/carddav {
            return 301 $scheme://$host/remote.php/dav;
        }
        
        location /.well-known/caldav {
            return 301 $scheme://$host/remote.php/dav;
        }
}
}

四、上传SSL证书

将证书文件修改为cert01.pem和cert01.key上传到 /usr/local/nginx/conf/ 目录中

Nginx反向代理Nextcloud并配置HTTPS访问-下一朵云
图2 上传SSL证书

五、启动Nginx

/usr/local/nginx/sbin/nginx

添加开机自启动

echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local

在Centos系统防火墙放行443端口,如果是云服务器,在云服务器管理页面放行443/tcp

firewall-cmd --zone=public --add-port=443/tcp 
firewall-cmd --runtime-to-permanent

将域名p.hvz.cc 解析到服务器的IP地址,待解析生效后,打开浏览器输入https://p.hvz.cc 测试访问Nextcloud

Nginx反向代理Nextcloud并配置HTTPS访问-下一朵云
图3 web访问测试

至此,nginx反向代理并配置HTTPS访问成功,现在需要修改Nextcloud的配置文件,添加信任域名并修改配置。

六、修改Nextcloud配置文件

(1)修改’trusted_domains’,将域名设置为信任域名

  'trusted_domains' => 
  array (
    0 => 'p.hvz.cc',

  ),

(2)修改 ‘overwrite.cli.url’

'overwrite.cli.url' => 'https://p.hvz.cc:443',

(3)添加如下内容

在配置文件最后一行 ); 前添加如下内容

'overwritehost' => 'p.hvz.cc:443',
'overwriteprotocol' => 'https',

此时,返回浏览器刷新页面

Nginx反向代理Nextcloud并配置HTTPS访问-下一朵云
图4 Nextcloud登录

登录管理员账户后,查看概览,“所有检查已通过

Nginx反向代理Nextcloud并配置HTTPS访问-下一朵云
图5 Nextcloud概览
本文链接:https://www.orcy.net.cn/2928.html,转载请附上原文出处链接

2 条评论

  • 头像
    kevin.cheung
    2024-01-02

    Hi,我也是一个NC用户,尝试用nginx作反向代理,应用场景和您的这篇文章一样。我是个小白有几点问题想请教下。官方是有个nginx的示例配置,我发现应用的到该场景NC是无法工作的。如:add_header Referrer-Policy 安全部分和rewrite ^/(?!index|remote…..地址重写部分。其实还有几点,我对nginx不了解,希望您能给点帮助,提前感谢0.0!thank
    https://docs.nextcloud.com/server/26/admin_manual/installation/nginx.html

    • 头像
      pony
      2024-01-04

      基于容器搭建不需要配置add_header和rewrite部分,至于官方文档中的add_header部分是对于请求返回数据的安全配置以及搜索引擎抓取限制等,rewrite部分是去掉连接中的?+参数的部分,让URL看起来更美观和安全。

发表评论

电子邮件地址不会被公开。 必填项已用*标注