Files
jack ning 18bd39845c update
2025-11-22 16:00:41 +08:00
..
2025-11-20 13:35:21 +08:00
2025-11-22 16:00:41 +08:00
2025-11-09 21:14:04 +08:00

Nginx

:::tip

  • 操作系统Ubuntu 20.04 LTS
  • 服务器最低配置 2 核 4G 内存,推荐配置 4 核 8G 内存。

:::

安装

sudo apt update
sudo apt install nginx
# 查看是否安装成功
netstat -ntlp
# 如果80端口正常启动则证明安装成功
# 停止nginx
# service nginx stop
# 启动nginx
# service nginx start
# 重启nginx:
# service nginx restart
# systemctl restart nginx
# 重新加载:
# service nginx force-reload
# 查看是否安装stream模块
nginx -V | grep stream # 注意是大写V
# 有输出内容证明已经安装
nginx version: nginx/1.18.0 (Ubuntu)
# ...
# 可以看到参数:--with-stream=dynamic说明已经安装stream模块
# 对应报错unknown directive "stream" in /etc/nginx/nginx.conf需要在nginx.conf的第一行插入
# load_module /usr/lib/nginx/modules/ngx_stream_module.so;
# 缓存路径创建文件夹在nginx.conf文件中用到
mkdir -p /var/www/html/nginx/cache/webserver
# 检查nginx配置文件是否有语法错误
sudo nginx -t
# 重新加载配置文件
nginx -s reload
# 或者 重启nginx
service nginx restart

准备

  • 将下载的 server 文件解压,解压后的文件结构如下
(base) server % tree -L 1
.
├── admin
├── agent
├── bytedesk-starter-0.4.0.jar
├── chat
├── config
├── logs
├── readme.md
├── readme.zh.md
├── start.bat
├── start.sh
├── stop.bat
├── stop.sh
└── uploader

7 directories, 7 files
  • 将其中的 adminagentchat 三个文件夹复制到 /var/www/html/weiyuai/ 文件夹下。
  • sudo chmod -R a+rX /var/www/html/weiyuai
  • 其中admin 为管理后台agent 为客户端chat 为访客端
  • 三者默认访问的服务器地址为: http://127.0.0.1:9003, 发布到线上时需要修改才能够正常使用,具体修改方法如下:
  • 找到 admin/config.json 、 agent/config.json 和 chat/config.json 三个文件
  • config.json 文件内容如下:
// admin、agent config.json
{
    "enabled": false,
    "apiUrl": "https://api.weiyuai.cn",
    "websocketUrl": "wss://api.weiyuai.cn/websocket",
    "htmlUrl": "https://www.weiyuai.cn"
}
// visitor config.json
{
    "enabled": false,
    "apiUrl": "https://api.weiyuai.cn",
    "websocketUrl": "wss://api.weiyuai.cn/stomp",
    "htmlUrl": "https://www.weiyuai.cn"
}
  • enabled 字段为是否启用自定义服务器地址,默认为 false。这里需要将 false 改为 true。只有修改为 true下面的 apiHost 和 htmlHost 才能生效
  • apiUrl 字段为 api 地址默认为api.weiyuai.cn请替换为自己的域名
  • websocketUrl 字段为 websocket 地址默认为ws://api.weiyuai.cn/websocket请替换为自己的域名
  • htmlHost 字段为静态网页地址默认为www.weiyuai.cn请替换为自己的域名

替换为ip实例

  • 将域名替换为ip
  • 将https替换为http
// admin、agent config.json
{
    "enabled": false,
    "apiUrl": "http://127.0.0.1:9003",
    "websocketUrl": "ws://127.0.0.1:9885/websocket",
    "htmlUrl": "http://127.0.0.1:9003"
}

// visitor config.json
{
    "enabled": false,
    "apiUrl": "http://127.0.0.1:9003",
    "websocketUrl": "ws://127.0.0.1:9003/stomp",
    "htmlUrl": "http://127.0.0.1:9003"
}

nginx.conf

在nginx.conf文件中http模块添加如下内容

#...
http {
    ##...
    
    ## restapi-负载均衡
    upstream weiyuai {
        # round_robin; # 默认,轮流分配
        ip_hash; # 同一个ip访问同一台服务器, 这样来自同一个IP的访客固定访问一个后端服务器
        # least_conn; # 公平分配
        # server 172.16.81.2:9003     weight=2 max_fails=10 fail_timeout=60s;
        server 127.0.0.1:9003 weight=2 max_fails=10 fail_timeout=60s;
    }

    # websocket-负载均衡
    upstream weiyuaiwss {
        # round_robin; # 默认,轮流分配
        ip_hash; # 同一个ip访问同一台服务器, 这样来自同一个IP的访客固定访问一个后端服务器
        # least_conn; # 公平分配
        # server 172.16.81.2:9885     weight=2 max_fails=10 fail_timeout=60s;
        server 127.0.0.1:9885 weight=2 max_fails=10 fail_timeout=60s;
    }

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

sites-available

在sites-available文件夹下创建4个文件如下

weiyuai_cn_80.conf

  • 需要修将 server_name weiyuai.cn *.weiyuai.cn; 改为自己的域名或者IP地址
# weiyuai_cn_80.conf内容
server {
    listen 80;
    listen [::]:80;

    root /var/www/html/weiyuai/;
    index index.html index.htm index.nginx-debian.html index.php;

    server_name weiyuai.cn *.weiyuai.cn;

    location / {
        # 匹配所有路径并尝试首先提供文件然后目录最后回退到index.html
        try_files $uri $uri/ /index.html; # 这里应该指向根目录的index.html而不是特定路径下的index.html
    }

    # 如果需要为每个子路径提供特定的index.html您可以添加额外的location块
    location /admin/ {
        try_files $uri $uri/ /admin/index.html;
    }

    location /agent/ {
        try_files $uri $uri/ /agent/index.html;
    }

    location /chat/ {
        try_files $uri $uri/ /chat/index.html;
    }

    location /frame/ {
        try_files $uri $uri/ /chat/index.html;
    }
}

weiyuai_cn_443.conf

  • 可选仅有启用ssl的情况下需要
  • 需要修将 server_name weiyuai.cn *.weiyuai.cn; 改为自己的域名或者IP地址
  • 443端口配置需要ssl证书这里使用的是Let's Encrypt的免费SSL证书
  • 需要修改ssl证书的路径
# weiyuai_cn_443.conf内容
server {
	listen 443 ssl;
	listen [::]:443 ssl;

	ssl_certificate /etc/letsencrypt/live/weiyuai.cn/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/weiyuai.cn/privkey.pem; # managed by Certbot

	server_name weiyuai.cn *.weiyuai.cn;

	root /var/www/html/weiyuai;
	index index.html index.htm index.nginx-debian.html index.php;

	location / {
        # 匹配所有路径并尝试首先提供文件然后目录最后回退到index.html
        try_files $uri $uri/ /index.html; # 这里应该指向根目录的index.html而不是特定路径下的index.html
    }

    # 如果需要为每个子路径提供特定的index.html您可以添加额外的location块
    location /admin/ {
        try_files $uri $uri/ /admin/index.html;
    }

    location /agent/ {
        try_files $uri $uri/ /agent/index.html;
    }

    location /chat/ {
        try_files $uri $uri/ /chat/index.html;
    }

    location /frame/ {
        try_files $uri $uri/ /chat/index.html;
    }

    location /docs/ {
        try_files $uri $uri/ /docs/index.html;
    }
}

weiyuai_cn_api_80.conf

  • 需要修将 server_name api.weiyuai.cn; 改为自己的域名或者IP地址
# weiyuai_cn_api_80.conf内容
#
# http://api.weiyuai.cn
server {
	listen 80;
	listen [::]:80;

    server_name api.weiyuai.cn;

    # 直接将所有请求代理到Spring Boot
    location / {
        proxy_pass http://weiyuai;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        include fastcgi_params;
    }

    ## 反向代理
    # https代理stomp连接
    location /stomp {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass http://weiyuai/stomp;

        # 为记录真实ip地址而不是反向代理服务器地址
        proxy_set_header  Host            $host;
        proxy_set_header  X-Real-IP       $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        include           fastcgi_params;
    }

    ## 反向代理
    # https代理websocket连接
    location /websocket {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass http://weiyuaiwss/websocket;

        # 为记录真实ip地址而不是反向代理服务器地址
        proxy_set_header  Host            $host;
        proxy_set_header  X-Real-IP       $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        include           fastcgi_params;
    }

    #增加两头部
    add_header X-Via $server_addr;
    add_header X-Cache $upstream_cache_status;

    ## 反向代理
    location @springboot {
		# 将nginx所有请求均跳转到9003端口
        proxy_pass http://weiyuai;
        
        # 为记录真实ip地址而不是反向代理服务器地址
        proxy_set_header  Host            $host;
        #  X-Real-IP 让日志的IP显示真实的客户端的IP
        proxy_set_header  X-Real-IP       $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        include           fastcgi_params;

        # 设置缓存
        # 为应答代码为200和302的设置缓存时间为10分钟404代码缓存10分钟。
        #proxy_cache webserver;
        # proxy_cache_valid  200 302  10m;
        proxy_cache_valid  404      10m;
	}
}

weiyuai_cn_api_443.conf

  • 可选仅有启用ssl的情况下需要
  • 需要修将 server_name api.weiyuai.cn; 改为自己的域名或者IP地址
  • 443端口配置需要ssl证书这里使用的是Let's Encrypt的免费SSL证书
  • 需要修改ssl证书的路径
# weiyuai_cn_api_443.conf内容
server {
	listen 443 ssl;
	listen [::]:443 ssl;

	ssl_certificate /etc/letsencrypt/live/weiyuai.cn/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/weiyuai.cn/privkey.pem; # managed by Certbot

	server_name api.weiyuai.cn;

    # 直接将所有请求代理到Spring Boot
    location / {
        proxy_pass http://weiyuai;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        include fastcgi_params;
    }

    ## 反向代理
    # https代理stomp连接
    location /stomp {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass http://weiyuai/stomp;

        # 为记录真实ip地址而不是反向代理服务器地址
        proxy_set_header  Host            $host;
        proxy_set_header  X-Real-IP       $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        include           fastcgi_params;
    }

    ## 反向代理
    # https代理websocket连接
    location /websocket {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass http://weiyuaiwss/websocket;

        # 为记录真实ip地址而不是反向代理服务器地址
        proxy_set_header  Host            $host;
        proxy_set_header  X-Real-IP       $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        include           fastcgi_params;
    }

    #增加两头部
    add_header X-Via $server_addr;
    add_header X-Cache $upstream_cache_status;

    ## 反向代理
    location @springboot {
		# 将nginx所有请求均跳转到9003端口
        proxy_pass http://weiyuai;

        # add_header Access-Control-Allow-Origin *; # 报错不能添加需要在spring boot中去掉相应的origin
        # 为记录真实ip地址而不是反向代理服务器地址
        proxy_set_header  Host            $host;
        #  X-Real-IP 让日志的IP显示真实的客户端的IP
        proxy_set_header  X-Real-IP       $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        include           fastcgi_params;

        # 设置缓存
        # 为应答代码为200和302的设置缓存时间为10分钟404代码缓存10分钟。
        #proxy_cache webserver;
        #proxy_cache_valid  200 302  10m;
        proxy_cache_valid  404      10m;
	}
}

创建软链接

# 删除默认的软连接(可选)
sudo unlink /etc/nginx/sites-enabled/default

# 方法1使用 && 连接多个命令
sudo ln -s /etc/nginx/sites-available/weiyuai_cn_80.conf /etc/nginx/sites-enabled/ && \
sudo ln -s /etc/nginx/sites-available/weiyuai_cn_443.conf /etc/nginx/sites-enabled/ && \
sudo ln -s /etc/nginx/sites-available/weiyuai_cn_api_80.conf /etc/nginx/sites-enabled/ && \
sudo ln -s /etc/nginx/sites-available/weiyuai_cn_api_443.conf /etc/nginx/sites-enabled/ && \
sudo ln -s /etc/nginx/sites-available/weiyuai_cn_coturn_80.conf /etc/nginx/sites-enabled/ && \
sudo ln -s /etc/nginx/sites-available/weiyuai_cn_coturn_443.conf /etc/nginx/sites-enabled/ && \
sudo ln -s /etc/nginx/sites-available/weiyuai_cn_demo_80.conf /etc/nginx/sites-enabled/ && \
sudo ln -s /etc/nginx/sites-available/weiyuai_cn_demo_443.conf /etc/nginx/sites-enabled/ && \
sudo ln -s /etc/nginx/sites-available/weiyuai_cn_janus_80.conf /etc/nginx/sites-enabled/ && \
sudo ln -s /etc/nginx/sites-available/weiyuai_cn_janus_443.conf /etc/nginx/sites-enabled/ && \
sudo ln -s /etc/nginx/sites-available/weiyuai_cn_jitsi_80.conf /etc/nginx/sites-enabled/ && \
sudo ln -s /etc/nginx/sites-available/weiyuai_cn_jitsi_443.conf /etc/nginx/sites-enabled/ && \
sudo ln -s /etc/nginx/sites-available/weiyuai_cn_sip_80.conf /etc/nginx/sites-enabled/ && \
sudo ln -s /etc/nginx/sites-available/weiyuai_cn_sip_443.conf /etc/nginx/sites-enabled/

# 方法2使用 for 循环(推荐)
for conf in weiyuai_cn_80 weiyuai_cn_443 weiyuai_cn_api_80 weiyuai_cn_api_443 weiyuai_cn_coturn_80.conf weiyuai_cn_coturn_443.conf weiyuai_cn_demo_80 weiyuai_cn_demo_443 weiyuai_cn_janus_80 weiyuai_cn_janus_443 weiyuai_cn_jitsi_80 weiyuai_cn_jitsi_443  weiyuai_cn_sip_80 weiyuai_cn_sip_443; do
  sudo ln -s /etc/nginx/sites-available/${conf}.conf /etc/nginx/sites-enabled/
done

# 方法3使用通配符如果文件名有规律
sudo ln -s /etc/nginx/sites-available/weiyuai_cn_*.conf /etc/nginx/sites-enabled/

使配置生效

# 检查nginx配置文件是否有语法错误
sudo nginx -t
# 重新加载nginx配置
sudo nginx -s reload
# 或
sudo systemctl reload nginx
# 查看访问日志
tail -f /var/log/nginx/access.log
# 查看报错日志
tail -f /var/log/nginx/error.log

对外开放端口

# 对外开放端口号
http80
https443
# 可选,可不对外开放
mysql3306
redis6379
# rest api9003
# websocket9885

TCP 连接数修改(可选)

# 查看Linux系统用户最大打开的文件限制
ulimit -n
# 65535
# 修改打开文件限制
vi /etc/security/limits.conf
root soft nofile 655350
root hard nofile 655350
nginx soft nofile 6553500
nginx hard nofile 6553500
* soft nofile 655350
* hard nofile 655350
# 其中root指定了要修改哪个用户的打开文件数限制。
# 可用'*'号表示修改所有用户的限制soft或hard指定要修改软限制还是硬限制
# 102400则指定了想要修改的新的限制值即最大打开文件数(请注意软限制值要小于或等于硬限制)
# 注意:修改了/etc/security/limits.conf关闭Terminal重新登录或重启服务器生效
# 查看 open files数
ulimit -a

常见问题

# 查看nginx log
cd /var/log/nginx

参考