Administrator
Published on 2025-04-19 / 0 Visits
0

配置Nginx作为反向代理

创建域名的Nginx服务器块配置文件,该文件位于/etc/nginx/sites-available/目录

sudo vim /etc/nginx/sites-available/ai.xxx.com

此时会进入文本编辑模式,按i键进入编辑状态。
首先,将以下代码复制进文件中

server {
    listen 80;
    server_name ai.xxx.com;   # 修改标记,这里修改成你的域名

    # 强制重定向到HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name ai.xxx.com;  # 修改标记,这里修改成你的域名

    # 使用你的SSL证书
    ssl_certificate /ssl_key/aaa.pem;  # 修改标记,这里修改pem证书文件位置
    ssl_certificate_key /ssl_key/aaa.key;  # 修改标记,这里修改key证书文件位置

    # 流式输出
    proxy_cache off;
    proxy_buffering off; 
    chunked_transfer_encoding on;
    tcp_nopush on; 
    tcp_nodelay on;
    keepalive_timeout 600;

    # 其他SSL设置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://127.0.0.1:8080;  # # 修改标记,修改为应用程序的实际地址
        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;
	
    }
}

粘贴成功后,按一下Esc键,退出编辑状态
然后输入:wq,保存文件并退出编辑器(注意是英文符号)

保存文件后,创建一个符号链接到sites-enabled 目录:

sudo ln -s /etc/nginx/sites-available/ai.xxx.com /etc/nginx/sites-enabled/

5、 配置防火墙

sudo ufw allow 'Nginx Full'

6、 测试Nginx配置

测试Nginx配置文件是否有语法错误:

sudo nginx -t

如果一切正常,重新加载Nginx以应用更改:

sudo systemctl reload nginx

7、 检查访问

现在,你应该能够通过https://ai.xxx.com 访问你的网站了,所有的流量都会被Nginx解密并通过HTTP协议转发给监听在8080端口的应用程序。

后续记得定期更新你的证书就行
另外,我做的配置文件没有加强安全防护,可以参考网上的帖子,加强Nginx本身的安全策略。

附注:更安全的配置文件

可能会需要加强Nginx的安全防护,但不确定是否会影响MaxKB使用,我也尝试了一些参数,以下是我尝试出来的经验,可以供大家参考

server {
    listen 80;
    server_name ai.xxx.com;   # 修改标记,这里修改成你的域名

    # 强制重定向到HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name ai.xxx.com;  # 修改标记,这里修改成你的域名

    # 使用你的SSL证书
    ssl_certificate /ssl_key/aaa.pem;  # 修改标记,这里修改pem证书文件位置
    ssl_certificate_key /ssl_key/aaa.key;  # 修改标记,这里修改key证书文件位置

    # 流式输出
    proxy_cache off;
    proxy_buffering off; 
    chunked_transfer_encoding on;
    tcp_nopush on; 
    tcp_nodelay on;
    keepalive_timeout 600;

    # 启用HSTS
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

    # 启用 CSP
    add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src * data:; object-src 'none'; report-uri /csp-report-endpoint";

    # 只允许同源页面嵌入
    add_header X-Frame-Options SAMEORIGIN;

     # 启用 XSS 过滤
    add_header X-XSS-Protection "1; mode=block";

     # 启用 X-Content-Type-Options
    add_header X-Content-Type-Options "nosniff";

    # 其他SSL设置
    # ssl_protocols TLSv1.2 TLSv1.3;
    # ssl_ciphers HIGH:!aNULL:!MD5;
    # ssl_prefer_server_ciphers on;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://127.0.0.1:8080;  # # 修改标记,修改为应用程序的实际地址
        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;

        # 只允许GET PUT POST DELETE方法
        limit_except GET PUT POST DELETE {
            deny all; # 拒绝所有其他方法
        }
    }

    # CSP 报告处理端点
    location /csp-report-endpoint {
        access_log /var/log/nginx/csp_report.log;
        return 204;
    }
}

限制访问日志

sudo chmod 640 /var/log/nginx/*
sudo chown root:adm /var/log/nginx/*

以上是我尝试出来的方法,但要注意的是,如果使用了MaxKB的第三方嵌入代码,则MaxKB必须要与嵌入的网站同源。