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