Closed isolume closed 2 years ago
i got this too. i ran it in docker. i found there must be lines below in the nginx.conf to make it work location / { proxy_pass http://codeserver.xxx.xxx:8443/; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Accept-Encoding gzip; } this is from https://github.com/cdr/code-server/blob/main/docs/guide.md#using-lets-encrypt-with-nginx
proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Accept-Encoding gzip;
proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Accept-Encoding gzip;
Thanks, that seemed to work.
Any idea which version broke this? I can't get it to work with Nginx-Proxy-Manager so I'll just downgrade until code-server gets it's sh*t together.
cc @code-asher
Those headers enable proxying websockets so it is not a code-server issue as far as I can tell.
If anyone is looking for a solution for ingress-nginx on Kubernetes like I was, add this annotation to your ingress
nginx.org/websocket-services: "code-server"
Replace code-server with whatever your code-server service name is.
A little late now, but does anyone have a working configuration for Apache2?
A little late now, but does anyone have a working configuration for Apache2?
Hey looking for the same thing, having issues proxying code server in apache2
@tinuh @ZandercraftGames For those having issues with reverse proxy in Apache, refer to https://github.com/coder/code-server/issues/4723#issuecomment-1105319574
I hope this works for you!
A little late now, but does anyone have a working configuration for caddy2?
proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Accept-Encoding gzip;
Thank you very much. It's very useful to me.
for kubernetes, I had to add BOTH suggestions from Link1 and annotations as follows.
PS: the {{ .Values.user }} etc, are dynamic values from values.yml of helm chart which you need to replace
nginx.org/websocket-services: code-server-{{ .Values.user }}
nginx.org/server-snippets: |
location / {
proxy_pass http://{{ .Values.host_domain }}:{{ .Values.port }}/;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
}
Entire example below using helm chart
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: code-server-{{ .Values.user }}
namespace: {{ .Values.namespace }}
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.org/websocket-services: code-server-{{ .Values.user }}
nginx.org/server-snippets: |
location / {
proxy_pass http://{{ .Values.host_domain }}:{{ .Values.port }}/;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
}
spec:
tls:
- hosts:
- {{ .Values.host_domain }}
secretName: code-server-secret-{{ .Values.user }}
rules:
- host: {{ .Values.host_domain }}
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: code-server-{{ .Values.user }}
port:
number: {{ .Values.port }}
Hello, leaving this comment here just in case anyone in the future is having this issue.
Cloudflare tunnels, got this same error. Solution was going to dash.cloudflare.com and setting websockets to enabled
A little late now, but does anyone have a working configuration for caddy2?
Did you ever get a resolution to this?
If you are facing wss:// websocket 1006 error on kubernetes with NGINX Ingress Controller, you can try to add timeout annotations to service ingress.
nginx.org/proxy-read-timeout: "3600"
nginx.org/proxy-send-timeout: "3600"
I don't want to wake up an old issue. But I've had it working, and suddenly this error came. I'm using swag and my reverse proxy conf was working fine. The suggested addition of headers didn't work. Any tips?
Just to confirm, is Host
one of the headers you added? v4.10.0 added a security check that uses the host and origin headers.
@code-asher thanks. Adding Host
solved the issues with v4.12.0.
code-server version: 4.12.0 NginxProxyManager custom config:
location /
{
proxy_pass http://10.0.0.3:80;
proxy_set_header Host code.xxx.com:7443;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_connect_timeout 60;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
add_header X-Cache $upstream_cache_status;
}
proxy_set_header Host $http_host;
should also work if you want to avoid hard-coding the host.
Edit: Or proxy_set_header X-Forwarded-Host $http_host;
.
I just added these headers:
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app binhex-code-server;
set $upstream_port 8500;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
Should I try to delete the binhex image and use yours? Cause it's not working for me.
I am not familiar with the binhex image but if you add --log debug
to the code-server invocation it should tell you what it is getting for the headers which might provide a clue on what is going wrong.
Please. Please don't forget to restart ngnix after changing the configuration.
sudo systemctl restart nginx
Fix for Nginx-Proxy-Manager
VS Code since version 4.10.1
"Advanced" → Custom Nginx Configuration:
location / {
# proxy_ssl_verify off;
proxy_set_header Host $host;
proxy_set_header Accept-Encoding gzip;
proxy_set_header X-Forwarded-Host $host;
#proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;
# Proxy!
include conf.d/include/proxy.conf;
}
this works for me. Thanks!
Fix for Nginx-Proxy-Manager VS Code since version
4.10.1
"Advanced" → Custom Nginx Configuration:
location / { # proxy_ssl_verify off; proxy_set_header Host $host; proxy_set_header Accept-Encoding gzip; proxy_set_header X-Forwarded-Host $host; #proxy_set_header X-Forwarded-Host $host:$server_port; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $http_connection; proxy_http_version 1.1; # Proxy! include conf.d/include/proxy.conf; }
this one works for me. Thanks!
proxy_set_header Host $http_host;
should also work if you want to avoid hard-coding the host.
works, Thanks!
i got this too. i ran it in docker. i found there must be lines below in the nginx.conf to make it work location / { proxy_pass http://codeserver.xxx.xxx:8443/; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Accept-Encoding gzip; } this is from https://github.com/cdr/code-server/blob/main/docs/guide.md#using-lets-encrypt-with-nginx
I re-produced too, caused by the slight differences in nginx config template from https://github.com/cdr/code-server/blob/main/docs/guide.md#using-lets-encrypt-with-nginx , and issued a pull-request: https://github.com/coder/code-server/pull/6471
for me, below is work: (docker run & nginx proxy outside the docker container)
location / {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods *;
add_header Access-Control-Allow-Headers *;
# proxy_ssl_verify off;
proxy_set_header Host $host;
proxy_set_header Accept-Encoding gzip;
#proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:8081/;
}
Hello, leaving this comment here just in case anyone in the future is having this issue.
Cloudflare tunnels, got this same error. Solution was going to dash.cloudflare.com and setting websockets to enabled
![]()
Thank you. Your reply solved the problem I encountered.
对我来说,下面是工作:(docker run & nginx proxy externals of docker 容器)
location / { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods *; add_header Access-Control-Allow-Headers *; # proxy_ssl_verify off; proxy_set_header Host $host; proxy_set_header Accept-Encoding gzip; #proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Host $host:$server_port; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $http_connection; proxy_http_version 1.1; proxy_pass http://127.0.0.1:8081/; }
This config file worked for me. Solved the websock error. Thanks a lot! code-server ---> nginx
Hi, I found an issue where if I set the port to 443:443 in the docker compose of Nginx-Proxy-Manager ,reverse proxies are good. I was able to use code-server in the docker . But If I set a different port mapping 443 in the docker compose of Nginx-Proxy-Manager (such as 9091:443), I can't use linuxserver/code-server . There is an error, "The workbench failed to connect to the server (Error: WebSocket close with status code 1006)" . Because my port 443 is forbidden, I want to use a different port.
@octopus2181 Could you open a new issue with a Docker compose I can use to reproduce the issue? I will look into it.
For you referece, with code-server version 4.20.1, my working nginx configuration is:
location / {
proxy_pass http://localhost:8080/;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
}
For you referece, with code-server version 4.20.1, my working nginx configuration is:
location / { proxy_pass http://localhost:8080/; proxy_http_version 1.1; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Accept-Encoding gzip; }
Yes, you are right ! Setting proxy_set_header X-Forwarded-Host $http_host , the port 9091 can connect to the code-server . Thank you !
Since nearly every solution on this issue refers to non-standard networking configurations without elaborating on what they're supposed to indicate, here's the configuration that worked for my specific local environment (NGINX Proxy Manager + lscr.io's code-server image in separate docker stacks sharing the same 'proxy' bridge network):
8443
on the lscr.io image) location / {
proxy_pass http://192.168.32.52:80/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header Accept-Encoding gzip;
proxy_set_header Connection upgrade;
}
192.168.4.58
and 80
with the IP and port that NGINX Proxy Manager is accessible through on your server. This configuration uses the default ports that both code-server and NGINX Proxy Manager use out-of-the-box, at least while using lscr.io's code-server image- but it should still work either way.
If you run into any issues after this point, ensure you haven't incorrectly modified any of code-server's proxy-related environment variables (i.e, CS_DISABLE_PROXY or PROXY_DOMAIN), and ensure that you correctly configured your domain's DNS settings through your DNS provider if applicable (i.e, an A record pointing *.yourdomain.com to your server's IP or tunnel configuration).
Here's what my final docker-compose.yml file looked like (environment variables redacted):
version: "3.8"
code-server:
image: lscr.io/linuxserver/code-server:latest
container_name: code-server
restart: unless-stopped
environment:
- "PASSWORD=this_isnt_very_secure"
- "SUDO_PASSWORD=this_is_extremely_insecure"
- "DEFAULT_WORKSPACE=/srv" # Makes code-server start in /srv/ by default
volumes:
- '/srv/docker/apps/code-server:/config'
- '/srv:/workspace'
ports:
- '8443:8443'
secrets:
- CODE_SERVER_PWD
- CODE_SERVER_SUDO_PWD
networks:
default:
name: proxy
external: true # Assuming 'proxy' network has already been created and is also used by NPM
Full disclaimer that I have no idea if I'm following the best practices here, I'm just posting what worked for my very specific configuration. Feel free to correct me if there's a better way to go about any of this.
proxy_set_header Host $http_host;
should also work if you want to avoid hard-coding the host.Edit: Or
proxy_set_header X-Forwarded-Host $http_host;
.
@code-asher 's answer works for me, and a faster way:
./bin/code-server --host 0.0.0.0 --trusted-origins=* ...
for me, below is work: (docker run & nginx proxy outside the docker container)
location / { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods *; add_header Access-Control-Allow-Headers *; # proxy_ssl_verify off; proxy_set_header Host $host; proxy_set_header Accept-Encoding gzip; #proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Host $host:$server_port; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $http_connection; proxy_http_version 1.1; proxy_pass http://127.0.0.1:8081/; }
This configuration works for me.
for me, below is work: (docker run & nginx proxy outside the docker container)
location / { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods *; add_header Access-Control-Allow-Headers *; # proxy_ssl_verify off; proxy_set_header Host $host; proxy_set_header Accept-Encoding gzip; #proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Host $host:$server_port; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $http_connection; proxy_http_version 1.1; proxy_pass http://127.0.0.1:8081/; }
This configuration works for me.
This works for me. I've tried lots of configuration, the key line is proxy_set_header X-Forwarded-Host $host:$server_port;
--host 0.0.0.0 --trusted-origins=*
@wangyizhi1 Awesome, this works!
OS/Web Information
code-server --version
: 3.12.0Steps to Reproduce
Expected
The server would work normally.
Actual
See error above.
Logs
Logs look normal for the remote server, however browser gives error:
(I replaced my domain with for privacy reasons.)
Screenshot
Notes
This issue can be reproduced in VS Code: No