Apache 和 nginx 上的 Nextcloud 作为反向代理 + SSL
Nextcloud on apache and nginx as reverse proxy + SSL
我对 Apache 和 Nginx 很头疼。当我认为一个在工作时另一个不工作,反之亦然...
稍微解释一下的家伙:
我有一台带有 Nextcloud "installed" 的服务器,它正在使用 Apache2 和 MySQL。
我有一个 Raspberry PI 上面有 Nginx 作为反向代理。
我以前有过这个设置,但它不是一个干净的设置,所以我撕掉了所有东西并重新开始,希望是一个干净的配置。
路由器 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 并将其 "upscale" 到 https,然后将请求转发到 Apache-Nextcloud。
证书效果很好。
伙计们,请帮帮我,我不明白我做错了什么或什么不起作用以及为什么不起作用。如果您需要更多信息,请告诉我。我不能透露域名,内部IP和Public IP,你可以理解。
提前感谢您的回答。
如果我清楚地理解了你的模式,那么你有:
Client -> Router (NAT) -> Nginx (http/https) -> Apache (http)
你有 502 错误,因为你正试图 proxy_pass 请求到不存在的 443 Apache 端口。
我认为你应该像这样修复你的 proxy_pass 字符串:
proxy_pass http://nextcloud_IP;
妈的!它起作用了,我不再收到网关错误了。谢谢 mindfl 我想当你看配置文件这么久的时候你看不到这样的小问题:/
我对 Apache 和 Nginx 很头疼。当我认为一个在工作时另一个不工作,反之亦然...
稍微解释一下的家伙:
我有一台带有 Nextcloud "installed" 的服务器,它正在使用 Apache2 和 MySQL。
我有一个 Raspberry PI 上面有 Nginx 作为反向代理。
我以前有过这个设置,但它不是一个干净的设置,所以我撕掉了所有东西并重新开始,希望是一个干净的配置。
路由器 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 并将其 "upscale" 到 https,然后将请求转发到 Apache-Nextcloud。 证书效果很好。
伙计们,请帮帮我,我不明白我做错了什么或什么不起作用以及为什么不起作用。如果您需要更多信息,请告诉我。我不能透露域名,内部IP和Public IP,你可以理解。
提前感谢您的回答。
如果我清楚地理解了你的模式,那么你有:
Client -> Router (NAT) -> Nginx (http/https) -> Apache (http)
你有 502 错误,因为你正试图 proxy_pass 请求到不存在的 443 Apache 端口。
我认为你应该像这样修复你的 proxy_pass 字符串:
proxy_pass http://nextcloud_IP;
妈的!它起作用了,我不再收到网关错误了。谢谢 mindfl 我想当你看配置文件这么久的时候你看不到这样的小问题:/