apache和nginx上的Nextcloud作为反向代理+ SSL

时间:2018-08-27 12:04:38

标签: apache ssl nginx config nextcloud

我对Apache和Nginx感到头疼。当我认为一个人在工作时,另一个人却没有工作,反之亦然...

有点解释:

我有一台安装了Nextcloud的服务器,该服务器正在使用Apache2和MySQL。

我有一个带有Nginx的Raspberry PI,它充当反向代理。

我在不是一个干净的设置之前就已经进行过此设置,因此我撕掉了所有内容,并希望以一个干净的配置重新开始。

路由器80/443 => Nginx RP => Nextcloud

我尝试了许多配置文件和文档,但是现在我陷入了困境:

502错误的网关 nginx / 1.10.3

无论我对Apache或Nginx进行什么更改,我仍然会收到相同的消息...

这是我的Nginx反向配置文件:

server {

    listen rproxy_IP:80;
    server_name cloud.domain.com;
    return 301 https://$server_name$request_uri;
}

server {

    listen rproxy_IP:443 ssl;
    server_name cloud.domain.com;

    #Log storage
    access_log /var/log/nginx/cloud.domain.access.log;
    error_log /var/log/nginx/cloud.domain.error.log;

    #SSL Configurations
    ssl on;
    ssl_certificate /etc/nginx/ssl/crt.crt;
    ssl_certificate_key /etc/nginx/ssl/key.key;
    ssl_stapling on;
    ssl_stapling_verify on;

    location / {

        add_header Front-End-Https       on;
        proxy_headers_hash_max_size      512;
        proxy_headers_hash_bucket_size   64;
        proxy_set_header                 Host $host;
        proxy_set_header                 X-Forwarded-Proto $scheme;
        proxy_set_header                 X-Real-IP $remote_addr;
        proxy_set_header                 X-Forwarded-For $proxy_add_x_forwarded_for;

        # whatever the IP of your cloud server is
        proxy_pass                       https://nextcloud_IP;
    }
}

当我查看日志时,得到以下信息:

2018/08/27 13:42:25 [error] 19756#19756: *1 SSL_do_handshake() failed (SSL: error:1408F10B:SSL routines:ssl3_get_record:wrong version number) while SSL handshaking to upstream, client: **Public_IP**, server: **cloud.domain.com**, request: "GET / HTTP/1.1", upstream: "https://**nextcloud_IP**:443/", host: "**cloud.domain.com**"

我很难理解这一点,因为在今天早上之前,我具有完全相同的配置,而且没有问题。

现在这是我的Nextcloud的Apache配置:

    <VirtualHost rproxy_IP:80>
 DocumentRoot "/var/www/nextcloud"
 ServerName cloud.domain.com

Redirect permanent / https://cloud.domain.com/
Alias cloud.domain.com /var/www/nextcloud
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined

<Directory /var/www/nextcloud/>
 Options +FollowSymlinks
 AllowOverride All

 <IfModule mod_dav.c>
 Dav off
 </IfModule>

 SetEnv HOME /var/www/nextcloud
 SetEnv HTTP_HOME /var/www/nextcloud
 Satisfy Any

</Directory>

</VirtualHost>

这是Apache日志:

[Mon Aug 27 13:21:19.874269 2018] [mpm_prefork:notice] [pid 36967] AH00169: caught SIGTERM, shutting down
[Mon Aug 27 13:21:20.899777 2018] [mpm_prefork:notice] [pid 37263] AH00163: Apache/2.4.18 (Ubuntu) OpenSSL/1.0.2g configured -- resuming normal operations
[Mon Aug 27 13:21:20.899811 2018] [core:notice] [pid 37263] AH00094: Command line: '/usr/sbin/apache2'

我不得不提到我使用通配符。

路由器将80/443转发到反向代理 反向代理获取http并将其“升级”到https,然后将请求转发到Apache-Nextcloud。 证书效果很好。

请帮助我,我不明白我在做错什么或什么不起作用以及为什么不起作用。请告诉我是否需要更多信息。如您所知,我无法透露域名,内部IP和公共IP。

预先感谢您的回答。

2 个答案:

答案 0 :(得分:1)

如果我清楚地了解您的架构,那么您将:

Client -> Router (NAT) -> Nginx (http/https) -> Apache (http)

您遇到502错误,因为您尝试将proxy_pass请求发送到不存在的443 Apache端口。

我认为您应该像这样修复您的proxy_pass字符串:

proxy_pass http://nextcloud_IP;

答案 1 :(得分:0)

该死!它起作用了,我不再收到网关错误。谢谢 mindfl ,我想当您长时间查看配置文件时,您看不到诸如此类的小问题:/