nginx

记录使用nginx 调试遇到的问题

在Azure 的Ubuntu VM 上,安装一个nginx, 搭建一个网络,提供https 访问,设置证书,自动刷新证书,安装docker, 同时docker 中运行一个网站。总结遇到的坑。

  • 申请证书
    • 安装Certbot 跟Nginx 插件
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx

  • 申请证书
sudo certbot --nginx -d your-domain.com
  • 更新证书 这个是采用cron 任务,在每天中午运行Certbot 来更新证书。Let's Encripty 的证书有效期是90天。
sudo crontab -e
0 12 * * * /usr/bin/certbot renew --quiet
  • 配置我们的nginx
    目标:对于https://mydomain.com/apiserver1/ 的路由的请求转发到apiserver1 上,于是在/etc/nginx/nginx.conf 中有了如下的配置
server {
    listen 443 ssl;
    listen [::]:443;
    server_name your_domain_or_IP;
    ssl_certificate /etc/nginx/ssl/your_ssl_certificate.crt;
    ssl_certificate_key /etc/nginx/ssl/your_ssl_certificate_key.key;

    location /apiserver1{
        proxy_pass http://localhost:port/;
    }
}

这边有几个注意点

  • location 的子路由不带最后的/, 要不然当前的路由不会被包含。

  • proxy_pass 要带上/, 要不然,转发的路由会带上子路由

  • server_name 如果提供的是_, 那么,只有server_name 没有被任意一条server 命中的时候,才会采用这个server 的配置

  • server 块只能存在与 http块,或者event 块中

  • 修改完配置文件可以使用 sudo nginx -t 进行语法检查。 sudo systemctl restart nginx 来重启应用来使得配置生效。

  • 如何查看nginx运行的log,log 存放的路径是/var/log/nginx/access.log or error.log,可以通过命令 sudo tail -f /var/log/nginx/access.log, 打印出最新的log.

  • 默认情况下,nginx 会使用这个地方的配置,/etc/nginx/sites-availiabla/default, 之前一直在修改/etc/nginx/nginx.conf里面的配置,修改了不起作用一直返回404,后来发现是这个地方的配置覆写了我的配置。还要记住,server 块中的 端口与server_name 联合起来得唯一。

  • 之前通过这个这个镜像转发了chatgpt 的请求

docker run -d \
  --name copilot-gpt4-service \
  --restart always \
  -p 8080:8080 \
  -e HOST=0.0.0.0 \
  aaamoon/copilot-gpt4-service:latest
posted @ 2024-01-22 14:47  kongshu  阅读(2)  评论(0编辑  收藏  举报