『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 2396|回复: 8

[技术探讨] NGINGX 反代HASS无法访问

[复制链接]

14

主题

79

帖子

411

积分

中级会员

Rank: 3Rank: 3

积分
411
金钱
332
HASS币
0
发表于 2022-8-10 08:59:20 | 显示全部楼层 |阅读模式
本帖最后由 pisice 于 2022-8-24 16:08 编辑

我的网络环境:

宽带光猫(桥接,公网IP)-》OPENWRT-》虚拟机
虚拟机包括: 1.Ubuntu 22 (安装nginx)
2.Home assistant
域名xxx.xxx.xxx 证书没问题
网关:192.168.1.1
Ubuntu 22:192.168.1.2
Ubuntu 22 ssl port: 443
Home assistant:192.168.1.3
公网SSL port :1234
可以ping通xxx.xxx.xxxOPENWRT 端口转发到hass服务器8123端口,http可以访问并登陆。


我的问题:我计划用ubuntu 作为代理服务器,负责代理内网其他服务器访问,目前只以hass为例, 我按照网上这种nginx配置,nginx目前运行正常,但是hass从外网访问提示:400: Bad Request,本人刚接触nginx,一直找不出原因,请各位高手帮忙看看,
下面是我的网络参数配置:

openwrt:
clipboard.png
153d1484eaa5924687d7414f119aa80.png

nginx:
nginx.conf
+++++++++++++++++++++++
root@service:/etc/nginx/sites-available# cat /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        types_hash_max_size 2048;
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        ssl_certificate /etc/nginx/cert/xxx.xxx.xxx.pem;  #https认证文件
        ssl_certificate_key /etc/nginx/cert/xxx.xxx.xxx.key;  #https认证文件
        ssl_session_timeout 5m;
        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers on;
        keepalive_timeout 65;

        map $http_upgrade $connection_upgrade {
            default upgrade;
            ''       close;
}
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        gzip on;

        application/xml+rss text/javascript;
        access_log /var/log/nginx/xxx.xxx.xxx.log combined;
        error_log /var/log/nginx/xxx.xxx.xxx.error.log debug;  

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}
+++++++++++++++++++++++++++++++++++++
root@service:/etc/nginx/sites-available# default

server {
        server_name xxx.xxx.xxx   #域名
        listen 80;   #http端口
        listen 443 ssl;    #https端口
        listen [::]:443 ssl;

        location / {
                proxy_ssl_server_name on;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $host : $server_port;
                proxy_http_version 1.1;
                proxy_pass http://192.168.1.3:8123;      #HASS 服务器
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                }
        root /var/www/html;
                try_files $uri $uri/ =404;
}
+++++++++++++++++++++++++++++++++++++++
hass configuration.yaml

# Loads default set of integrations. Do not remove.
#Python_script:

default_config:
wake_on_lan:
map:
mobile_app:
discovery:
cloud:
homekit:
ios:
notify:

http:
  server_port: 8123
  base_url: http://192.168.1.3
  ip_ban_enabled: True
  login_attempts_threshold: 5

# Text to speech
tts:
  - platform: google_translate
#  - platform: baidu

#automation
automation: !include automations.yaml  
script: !include scripts.yaml
scene: !include scenes.yaml

#havcs
havcs:
  platform:  

    - dueros  

  http:
    clients:
      duerosxxx: 123456
  device_config: ui
+++++++++++++++++++++++++++访问问题已解决,目前外网可以正常访问,通NGINX反向代理。
+++++++++++++++++++++++++++

新的问题:百度技能平台授权还是现在授权失败图标,但是用模拟测试可以与小度音箱建立连接,不知道是不是授权成功了。??

回复

使用道具 举报

16

主题

168

帖子

1409

积分

金牌会员

Rank: 6Rank: 6

积分
1409
金钱
1241
HASS币
0
发表于 2022-8-10 09:15:46 来自手机 | 显示全部楼层
不会nginx就用hassio addon里的nginx proxy manager,那个是小白级的
回复

使用道具 举报

14

主题

79

帖子

411

积分

中级会员

Rank: 3Rank: 3

积分
411
金钱
332
HASS币
0
 楼主| 发表于 2022-8-10 10:21:55 | 显示全部楼层
pikaq 发表于 2022-8-10 09:15
不会nginx就用hassio addon里的nginx proxy manager,那个是小白级的

。。。那个我用过,也是一直不通。。。。所以才决定用他 的真身,顺便学习一下
回复

使用道具 举报

16

主题

168

帖子

1409

积分

金牌会员

Rank: 6Rank: 6

积分
1409
金钱
1241
HASS币
0
发表于 2022-8-10 12:46:33 来自手机 | 显示全部楼层
pisice 发表于 2022-8-10 10:21
。。。那个我用过,也是一直不通。。。。所以才决定用他 的真身,顺便学习一下 ...

https://www.home-assistant.io/integrations/http/#use_x_forwarded_for
回复

使用道具 举报

1

主题

95

帖子

1298

积分

金牌会员

Rank: 6Rank: 6

积分
1298
金钱
1203
HASS币
0
发表于 2022-8-11 04:01:51 来自手机 | 显示全部楼层
本帖最后由 独心 于 2022-8-11 04:04 编辑

http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 192.168.1.0/24
回复

使用道具 举报

14

主题

79

帖子

411

积分

中级会员

Rank: 3Rank: 3

积分
411
金钱
332
HASS币
0
 楼主| 发表于 2022-8-11 10:14:28 | 显示全部楼层
谢谢,我试了试还是不行,我再研究下
回复

使用道具 举报

19

主题

274

帖子

1948

积分

金牌会员

Rank: 6Rank: 6

积分
1948
金钱
1674
HASS币
50
发表于 2022-8-11 12:54:45 | 显示全部楼层
本帖最后由 姚远 于 2022-8-11 13:01 编辑

nginx反代,就是一个路由,hass论坛有经典配置,抄过来就行了。还有啊,nginx已经路由了,内部应用就是在内网的应用方式进行配置。所以,configuration.yaml中,不要配置http了,按照内网配置就可以了
我的nginx 配置文件,外网访问的时候  https://hass.123.top:3352
map $http_upgrade $connection_upgrade {
       default upgrade;
       ''      close;
   }


# homeassistant
   server {
     listen 3352 ssl http2;
     ssl_certificate /etc/nginx/cert/cert_nginx.pem;
     ssl_certificate_key /etc/nginx/cert/cert_nginx.key; 
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
     ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
     ssl_prefer_server_ciphers on;
     ssl_session_timeout 10m;
     ssl_session_cache builtin:1000 shared:SSL:10m;
     ssl_buffer_size 1400;
     add_header Strict-Transport-Security max-age=15768000;
     ssl_stapling on;
     ssl_stapling_verify on;
     server_name hass.123.top;
     access_log /var/log/nginx/hass.123.top_nginx.log combined;
     error_log /var/log/nginx/hass.123.top_nginx.error.log debug;
     index index.html index.htm index.php;
     if ($ssl_protocol = "") {
         return 301 https://$host$request_uri; 
     }
  
     #error_page 404 /404.html;
     #error_page 502 /502.html;
     charset utf-8; #默认编码方式
     client_max_body_size 75M;

     # 其他的请求全部交给Python的uWSGI来处理
     location / {
      proxy_pass http://192.168.3.345:8123;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
     }
   }


回复

使用道具 举报

14

主题

79

帖子

411

积分

中级会员

Rank: 3Rank: 3

积分
411
金钱
332
HASS币
0
 楼主| 发表于 2022-8-12 13:36:28 | 显示全部楼层
姚远 发表于 2022-8-11 12:54
nginx反代,就是一个路由,hass论坛有经典配置,抄过来就行了。还有啊,nginx已经路由了,内部应用就是在 ...

多谢大神指点迷津
回复

使用道具 举报

14

主题

79

帖子

411

积分

中级会员

Rank: 3Rank: 3

积分
411
金钱
332
HASS币
0
 楼主| 发表于 2022-8-24 16:11:27 | 显示全部楼层
本帖最后由 pisice 于 2022-8-24 16:13 编辑
姚远 发表于 2022-8-11 12:54
nginx反代,就是一个路由,hass论坛有经典配置,抄过来就行了。还有啊,nginx已经路由了,内部应用就是在 ...

按你的这个代码修改后成功。
另外再HA的configuration.yaml里面也需要添加
http:  use_x_forwarded_for: true  trusted_proxies:    - xxx.xxx.xxx.xxx      # Add the IP address of the proxy server
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-29 04:53 , Processed in 0.087308 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表