我有一个Home Assistant实例运行在同一台服务器上,就像我的nginx代理一样,现在我想在我的公共域下创建一个子域。为了使我的Home Assistant实例在以下url下可用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来提供如上所述的服务?
发布于 2018-10-27 06:37:38
我的反向代理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 80;替换listen 443 ssl;即可。
发布于 2018-02-13 17:27:41
您提到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若要为您的域启动get服务器,请将其自动绑定到您的代理并为其获取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域测试。
https://stackoverflow.com/questions/47755689
复制相似问题