为知笔记私有部署配置nginx反向代理和https的方法

7/19/2022

使用nginx反向代理需要配置proxy_set_header

   server {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header x-wiz-real-ip $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        ...

ssl 证书配置

ssl_certificate /etc/nginx/server.crt;   改成你的证书的名字
ssl_certificate_key /etc/nginx/server.key;   改成你的证书的名字
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5:!EXP;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

由于为知笔记私有服务需要动态获取您的域名以及客户端使用的协议,因此,您需要在您的nginx服务上面增加一些配置,让客户端使用的协议,能够传递给为知笔记服务。

配置自动获取协议方式

通过这种方式配置,客户端可以使用http或者https协议,为知笔记服务能够自动获取客户端使用的协议。

配置nginx 反向代理 proxy_set_header 。 在server里面,增加下面的配置:

server {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade"
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header x-wiz-real-ip $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        ...
}

如果您的nginx 只有一个server 模块,或者其他的server模块没有特殊的需求,那么上面的配置,也可以统一配置到http模块中:

http {
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade"
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header x-wiz-real-ip $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header Host $http_host;
       proxy_set_header X-Forwarded-Proto $scheme;
       ...
}

如果您的nginx有多层,那么,您可能还需要额外的配置: 在http 模块中加入以下配置:

http {
    map $http_x_forwarded_proto $thescheme {
          default $scheme;
          https https;
    }
   ...
}

然后在server模块(或者http模块)里面,将前面配置中的proxy_set_header X-Forwarded-Proto $scheme;,替换为下面的代码:

proxy_set_header X-Forwarded-Proto $thescheme;

然后重新启动nginx服务。

强制使用https协议

如果您的nginx服务,并没有直接面向最终用户,而是在某些负载均衡/cdn后面,并且您的ssl证书是在这些负载均衡/cdn上面配置的,那么有可能会导致nginx无法正确获取客户端所使用的协议,从而导致无法将客户端使用的协议传递给为知笔记服务。在这种情况下,您可以修改nginx配置,强制通知服务使用https协议。

修改前面的配置,直接将proxy_set_header X-Forwarded-Proto $scheme修改成

  proxy_set_header X-Forwarded-Proto "https";

如果您需要给为知笔记私有部署配置HTTPS服务,则您应该自己增加一个nginx服务,并在这个nginx上面配置您的网站证书。具体nginx安装和启动方式,请自行搜索。

测试配置

在浏览器内输入:(注意是https协议,将your-server修改成您自己的服务器地址)

https://your-server/?p=wiz&c=endpoints

正常情况下,会返回一个json数据,检查第一个key wizas的值,应该是https开头。如果是http开头,则说明配置没有生效。

如果按照上面的方式,仍然无法正常使用https协议,请联系我们的客服。

将为知笔记的web指向xapp(支持协作笔记)

需要用户在容器外部配置nginx,并且配置https证书,nginx配置文件增加以下配置

  location ^~ /wapp {
     rewrite ^/wapp  /xapp permanent;
  }