我有一个Home Assistant实例在我的nginx代理服务器上运行,现在我想在我的公共域下创建一个子域。为了使我的Home Assistant实例在以下网址下可用https://something.com/homeassistant。我目前在nginx代理上使用此代码:
location / {
proxy_pass http://localhost:8080/;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
我已经尝试过:
location /homeassistant {
proxy_pass http://localhost:8080/;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
但这根本不起作用..
我在这里也使用了这个指南:https://home-assistant.io/docs/ecosystem/nginx_subdomain/
如何将nginx配置为如上所述进行服务?
答案 0 :(得分:2)
我的反向代理nginx的配置,带有带有https的子域:
server {
listen 443 ssl;
server_name homeassistant.domain.tld;
ssl on;
ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://<local-IP>:8123;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /api/websocket {
proxy_pass http://<local-IP>:8123/api/websocket;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
只需移除ssl部分,然后将listen 443 ssl;
替换为listen 80;
答案 1 :(得分:0)
您提到https://something.com/homeassistant作为子域名。根据我的理解,子域名就像https://homeassistant.something.com,其中homeassistant是something.com的子域名。但是,这似乎是一个小细节。
您是否使用docker进行设置?我使用这样的docker配置在子域上设置了homeassistant:
泊坞窗容器中的Nginx代理
docker run --name nginx-proxy \
-p 80:80 -p 443:443 -d --restart=always -v /etc/nginx/conf.d -v /etc/nginx/vhost.d -v /usr/share/nginx/html -v /etc/nginx/certs/:/etc/nginx/certs:ro --label com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy nginx
接下来,为config-generator创建模板:
curl https://raw.githubusercontent.com/jwilder/nginx-proxy/master/nginx.tmpl > /etc/nginx/templates/nginx.tmpl
设置代理的Nginx代理配置生成器
docker run --name nginx-config-gen \
-d --restart=always --volumes-from nginx-proxy -v /etc/nginx/templates/:/etc/docker-gen/templates/:ro -v /var/run/docker.sock:/tmp/docker.sock:ro --label com.github.jrcs.letsencrypt_nginx_proxy_companion.docker_gen jwilder/docker-gen -notify-sighup nginx-proxy -watch -wait 5s:30s /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
处理SSL证书的SSL随播广告
docker run --name nginx-letsencrypt \
-d --restart=always --volumes-from nginx-proxy -v /etc/nginx/certs/:/etc/nginx/certs:rw -v /var/run/docker.sock:/var/run/docker.sock:ro jrcs/letsencrypt-nginx-proxy-companion
因此,当您运行此程序时,您将拥有一个SSL加载代理,可自动配置新映像。接下来我们可以添加:
docker run --name domain.com \
-p 8888:80 -d --restart=always -v /etc/nginx/apps/www.domain:/etc/nginx/conf.d -e VIRTUAL_HOST=www.domain.com -e LETSENCRYPT_HOST=www.domain.com -e LETSENCRYPT_EMAIL=hosting@domain.com nginx
为您的域启动网络服务器,将其自动绑定到您的代理并获取SSL证书。只要域是唯一的,您就可以以相同的方式添加更多站点。使用homeAssistant的子域可以像homeassistant.domain.com这样:
docker run -d -p 8080:8123 --name home-assistant --net=host --restart=always --device=/dev/ttyACM0 -v /opt/homeAssistant:/config -v /etc/localtime:/etc/localtime:ro -e VIRTUAL_HOST=homeassistant.domain.com -e LETSENCRYPT_HOST=homeassistant.domain.com -e LETSENCRYPT_EMAIL=hosting@domain.com homeassistant/home-assistant
在这种情况下,请确保在此示例中在home-assistant配置文件夹(/ opt / homeAssistant)中创建一个空www目录,以便通过letsEncrypt启用SSL域测试。