跳到主要内容

Nginx

提示
  • 操作系统: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 -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
  • 将其中的 admin,agent,chat 三个文件夹复制到 /var/www/html/weiyuai/ 文件夹下。
  • 其中:admin 为管理后台,agent 为客户端,chat 为访客端
  • 三者默认访问的服务器地址为: http://127.0.0.1:9003, 发布到线上时需要修改才能够正常使用,具体修改方法如下:
  • 找到 admin/config.json 、 agent/config.json 和 chat/config.json 三个文件
  • config.json 文件内容如下:
{
"enabled": false,
"apiUrl": "https://api.weiyuai.cn",
"websocketUrl": "wss://api.weiyuai.cn/websocket",
"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
{
"enabled": false,
"apiUrl": "http://127.0.0.1:9003",
"websocketUrl": "ws://127.0.0.1:9885/websocket",
"htmlUrl": "http://127.0.0.1:9006"
}

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内容
server {
listen 80;
listen [::]:80;

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

server_name api.weiyuai.cn;

## 反向代理
# 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;
}

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
try_files $uri $uri/ @springboot;
}
}

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;

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

## 反向代理
# 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;
}

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
try_files $uri $uri/ @springboot;
}
}

创建软链接

# 创建软连接
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/

使配置生效

# 重新加载nginx配置
sudo nginx -s reload
# 或
sudo systemctl reload nginx

对外开放端口

# 对外开放端口号
http:80
https:443
# 可选,可不对外开放
mysql:3306
redis:6379
rest api:9003
websocket:9885

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

参考