☠ ☠ ☠ Check the credit card!!! ☠ ☠ ☠
🤷
I think i found a bug.
Two servers, lets call them client and forum.
Client server is hosting simple site, but it also have link to forum.
Forum server is hosting nodebb.
client nginx.conf
server {
listen 443 ssl http2;
server_name site.client.com;
include /usr/local/nginx/conf/ssl_auto.conf;
location /forum { try_files $uri @nodebb; }
location @nodebb {
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;
#proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass_request_headers on;
proxy_redirect off;
# Socket.IO Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_pass https://site.forum.com;
}
forum nginx.conf
upstream site_forum {
server unix:/tmp/nodebb.sock fail_timeout=0;
}
server {
listen 443 ssl http2;
root /forum/nodebb/;
server_name site.forum.com;
include /usr/local/nginx/conf/ssl.conf;
location /forum { try_files $uri @nodebb; }
location @nodebb {
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;
#proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass_request_headers on;
proxy_redirect off;
# Socket.IO Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_pass http://site_forum;
}
}
Right now when user will go to site.client.com/forum, he will see nodebb, and everything would be alright, but ...
when i log in to forum, some weird url redirect happens and path not follow forum config. Let me explain with examples:
When i log in i get redirected to:
https://site.client.com/?loggedin=true
and it should be https://site.client.com/forum/?loggedin=true
https://site.client.com/categories?loggedin=true
and it should be https://site.client.com/forum/categories?loggedin=true
https://site.client.com/topic/1/welcome-to-your-nodebb?loggedin=true
and it should be https://site.client.com/forum/topic/1/welcome-to-your-nodebb?loggedin=true
... so it just cuts out forum part. If i type forum to web browser like it should be, everything is fine, but not when logging in.
I think nodebb is responsible for this rewrite or i miss something in config?
Heres the browser console error when logging in:
The character encoding of the HTML document was not declared. The document will render with garbled text in some browser configurations if the document contains characters from outside the US-ASCII range. The character encoding of the page must be declared in the document or in the transfer protocol.
Hm i found stack trace JS in browser problem could be here but i could also be wrong
assets/src/client/login.js
success:function(e){ var n=utils.urlToLocation(e.next).pathname;
var r=utils.params({url:e.next});
r.loggedin=true;
var o=decodeURIComponent($.param(r));
window.location.href=n+"?"+o}
What is your url value configured in config.json? It should match exactly the url at which you access the forum, including the correct protocol and subfolder.
Its "url": "https://site.client.com/forum/"
Checked again and now this nginx config is not working it must be something with nginx im testing it again.
After fighting with nginx i just removed parts from nginx that are not needed to just reproduce this weird login redirect behavior.
NodeBB nginx subfolder setup.
upstream site_forum {
server unix:/tmp/nodebb.sock fail_timeout=0;
}
server {
listen 443 ssl http2;
root /forum/nodebb/;
server_name site.com;
include /usr/local/nginx/conf/ssl.conf;
location /forum { try_files $uri @nodebb; }
location @nodebb {
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;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
# Socket.IO Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_pass http://site_forum;
}
}
config.json url : https://site.com/forum
If i change /public/src/client/login.js to ...
success: function (data) {
var pathname = utils.urlToLocation(data.next).pathname;
var params = utils.params({ url: data.next });
params.loggedin = true;
var qs = decodeURIComponent($.param(params));
window.location.href = pathname + 'forum/?' + qs;
},
nodebb build
, nodebb upgrade
, ... everything works as expected.
@MoJo Ah yeah it looks like you've run into this bug: https://github.com/NodeBB/NodeBB/issues/8515
You'll need to cherry-pick the referenced commit to fix it in your install.