0

我有一个 Home Assistant 实例在我的 nginx 代理服务器上运行,现在我想在我的公共域下创建一个子域。为了使我在以下 url 下的 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 以提供如上所述的服务?

4

2 回答 2

2

我对带有 https 子域的反向代理 nginx 的配置:

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;

于 2018-10-26T22:37:37.793 回答
0

您提到https://something.com/homeassistant作为子域。据我了解,子域类似于https://homeassistant.something.com,其中 homeassistant 是 something.com 的子域。然而,这似乎是一个小细节。

您是否使用 docker 进行设置?我已经使用这样的 docker 配置在子域上设置了 homeassistant:

docker 容器中的 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

接下来,为配置生成器创建模板:

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 目录,以使 SSL 域测试能够由letsEncrypt 完成。

于 2018-02-13T09:27:41.103 回答