Nginx+Supervisor+WebSocket+Sanic+Redis -- 用Nginx和supervisor来部署WebSocket

环境: 阿里云Ubuntu18

Step 1:

sudo apt update
sudo apt install nginx
sudo apt install supervisor
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl enable supervisor

Step 2:

sudo vi /etc/nginx/sites-available/mysite.com

mysite.com文件内容如下:

upstream my_websocket {
   server 127.0.0.1:8528;   # 8528是websocket服务启动时绑定的端口号
}


map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

server {
    server_name mysite.com;
    ...

    location /feed {
      proxy_pass http://my_websocket;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      proxy_set_header Host $host;
      proxy_read_timeout 86400;  # 24 * 60 * 60;
    }
    ...
}

Step 3:

sudo ln -s /etc/nginx/sites-availabl/mysite.com /etc/nginx/sites-enable/mysite.com
sudo nginx -t
sudo nginx -s reload

Step 4:

https://blog.csdn.net/jaket5219999/article/details/80689076 (添加https证书)

Step 5:

sudo vi /etc/supervisor/conf.d/mysite.conf

content of mysite.conf:

[program:mywebsocket]
environment =
  GT_ID=xxx,
  GT_KEY=yyy,
  DJANGO_SETTINGS_MODULE=ws.settings
command=/home/myname/.local/bin/pipenv run python app.py
directory=/path/to/project/ws
numprocs=1
autostart=true
startsecs=10
autorestart=true
startretried=3
user=myname
redirect_stderr=true
stdout_logfile=/path/to/project/ws/ws.log
stdout_logfile_maxbytes=20MB
stdout_logfile_backups=20

Step 6:

sudo chown myname:myname /etc/supervisor/conf.d/mysite.conf
sudo supervisorctl update
sudo supervisorctl start mywebsocket
sudo supervisorctl status

Step 7:

// 在浏览器Console测试连接
ws = new WebSocket('wss://mysite.com/feed')

 

附:

# 后端项目Nginx配置

upstream api_host {
   server 127.0.0.1:9527;
}

server {
    server_name api.mydomain.net;
    set $project "api";
    set $codedir "/home/user/coding";

    location /api {
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_pass http://api_host;
    }

    client_max_body_size 10m;

    location ~ MP_verify_[a-zA-Z0-9]*\.txt$ {
      # 微信支付配置相关
      proxy_pass http://127.0.0.1:10240;
    }

    location = /admin {
      rewrite (.*)  /api/admin/ permanent;
    }

    location = /admin/ {
      rewrite (.*)  /api/admin/ permanent;
    }

    location /media {
      alias $codedir/$project/media;
    }
    location /static {
        alias $codedir/$project/static;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/api.mydomain.net/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/api.mydomain.net/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}



server {
    if ($host = api.mydomain.net) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
        return 301 https://$host$request_uri;



    server_name api.mydomain.net;

    listen 80;
    return 404; # managed by Certbot


}

# 前端项目Nginx配置

server {
    server_name www.mydomain.net;
    
    location /dist {
      add_header Cache-Control no-store;  # 不缓存
      # 或者用add_header Cache-Control no-cache;替代上面那一句,协商缓存
      add_header Pragma no-cache;
      # 2020/08/11 刷新不能拿到最新版本,关闭标签页或浏览器才能
        root /home/user/frontend/project-name;
        try_files $uri $uri/ /dist/index.html;
    }

     listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/mydomain.net/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/mydomain.net/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

server {
    if ($host = mydomain.net) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    server_name mydomain.net;

    listen 80;
    return 404; # managed by Certbot
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值