我需要知道是否可以使用Nginx作为反向代理来服务在不同的Raspberry Pi中托管的每个Web应用程序。
从图中可以看出,Raspberry将全部连接到非托管交换机,这是我打算安装nginx的第一个交换机,因此它可以用作反向代理,具体取决于互联网请求的网站。例如:wwww.site1.com,www.site2.www等
这可能吗? 我能否从连接到调制解调器而不是交换机的计算机上访问那些RPis?
注意:调制解调器是wifi调制解调器,而交换机是不受管理的有线交换机。
很抱歉,我的绘画技巧很差,感谢您的帮助。在购买所有这些东西之前,我需要知道这种想法是否可行。
答案 0 :(得分:1)
我认为有可能,但是有一些要求:
分配给调制解调器的静态外部IP;
静态IP;
调制解调器上正确的转发规则。
我的意思是,您需要转发所有如下请求:
调制解调器:80-> rp0:80
调制解调器:443-> rp0:443
在rp0上,端口可能与80和443不同,因此,请设置正确的规则,并在nginx config中进行记录。
之后,在网站配置中设置上游或使用rp1-3的IP:
upstream rp1 {
server 192.168.1.11:port;
}
upstream rp2 {
server 192.168.1.12:port;
}
upstream rp3 {
server 192.168.1.13:port;
}
用端口替换端口,该端口在适当的RPi上侦听。 网站配置将如下所示:
server {
server_name site1.com www.site1.com ;
location / { proxy_pass http://rp1 ; }
}
server {
server_name site2.com www.site2.com ;
location / { proxy_pass http://rp2 ; }
}
添加您需要的任何参数。 另外,如果您要托管一些静态网站,最好的方法就是将它们放置在rp0上。
编辑1 工作配置示例:
server {
listen 80;
server_name site1.com www.site1.com ;
location / { rewrite ^ https://$host$request_uri permanent;}
}
server {
listen 443 ssl;
server_name site1.com www.site1.com;
ssl_certificate /etc/letsencrypt/live/site1/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/site1/key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://rp1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
port_in_redirect off;
proxy_redirect http://rp1/ /;
}
请注意,如果要使用Letsencrypt,最好的方法是在rp0上设置certbot(或其他)。自动续订证书会更容易。另外,使用 /etc/letsencrypt/live/site1/fullchain.pem 。 为了使用多个SSL域,请确保安装Nginx支持SNI:
# nginx -V
nginx version: nginx/1.14.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
答案 1 :(得分:0)
这是头节点侧面的nginx conf:
server {
listen 80;
server_name www.codingindfw.com codingindfw.com;
location / { rewrite ^ https://$host$request_uri permanent;}
}
server{
listen 443 ssl;
server_name www.codingindfw.www codingindfw.com;
client_max_body_size 4G;
ssl_certificate /etc/letsencrypt/live/www.koohack.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.koohack.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
proxy_pass http://192.168.0.8;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
port_in_redirect off;
proxy_redirect http://192.168.0.8/ /;
}
}
这是运行实际Django应用程序的客户端上的nginx conf文件:
server {
listen 80 default_server;
server_name www.codingindfw.com;
client_max_body_size 4G;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/pi/coding-in-dfw;
}
location /media/ {
root /home/pi/coding-in-dfw;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/pi/coding-in-dfw/mysocket.sock;
}
}