Nginx是目前主流的Web服务器,在反向代理领域也是一哥,实际使用过程中遇到的问题做一个总结,也算是一个踩坑之旅。


1.系统

这里是在部署系统时遇到的问题。

1.1 Nextcloud

Nextcloud作为目前主流的私有文件存储分享系统,不论是在企业生产还是个人都很适用。


1.1.1 反向代理的域名不在nextcloud的trusted_domains中

​ 在适用nginx反向代理docker中的nextcloud时,默认nginx传递给docker的ip地址其实是反向代理的ip地址,即127.0.0.1,而nextcloud默认的配置文件中的trusted_domains参数中是不包含localhost127.0.0.1的,所以这就带来问题,不论你如何修改nextcloud的配置文件(一般是nextcloud/config/config.php)中的trusted_domains参数,nextcloud都会告诉你,你的来访域名不在nextcloud的信任域名中。

​ 要解决这个问题,我们需要对nginx的配置文件做一些修改,修改分为两部分。

​ 第一部分,是要在全局配置(默认路径/etc/nginx/nginx.conf)的http中利用map进行映射;

​ 第二部分,则是在对应的nextcloud配置文件(自己创建/etc/nginx/conf.d/nextcloud.conf)中的server下配置IP传递。

  • 全局配置

    # 首先配置nginx.conf添加http map
    vi /etc/nginx/nginx.conf
    
    # 在http内增加如下内容后保存
    map $http_upgrade $connection_upgrade {
          default upgrade;
          '' close;
        }
  • Nextcloud配置文件

    # 配置nextcloud.conf反代配置文件,增加如下
    vi /etc/nginx/conf.d/nextcloud.conf
    
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

配置完成后运行nginx -t进行检查,确认没有错误后运行nginx -s reloadsystemctl restart nginx重启nginx进行配置生效。

参考链接:


2.通用

以下是通用的系统会遇到的问题。

2.1 反向代理

这里是Nginx用作反向代理会遇到的通用问题。


2.1.1 ERR_CONTENT_LENGTH_MISMATCH

这是因为nginx需要访问/usr/local/nginx/proxy_temp文件夹下文件没有权限,导致各类缓存的js、css失败,网页不正常显示,按F12可以看到各种错误。

解决方式:配置/etc/nginx/nginx/conf文件,将nginx使用root启动,当然还有其他方法,这里不再赘述。

参考链接:https://blog.csdn.net/Mr_OOO/article/details/81068369


2.1.2 CSRF Check Failed

这是因为反向代理导致了跨域的问题,CSRF TOKEN 在域名变换后发生了变化,因此无法验证通过。

解决方式:在nginx配置文件中添加如下字段

proxy_pass_header       Set-Cookie;
proxy_pass_header        X-CSRF-TOKEN;  

参考链接:https://it.ismy.fun/2018/06/07/nginx-reverse-proxy-for-nextcloud/


2.2 服务

待补充

Last modification:May 7th, 2019 at 03:15 pm