了解NginX的proxy_pass

时间:2016-10-18 21:30:24

标签: nginx proxypass

我正在寻找有关如何简化问题的建议,以便我能够完全理解它,并发现如何对其进行故障排除。

我在DigitalOcean tutorial on installing Meteor on Ubuntu 14.04中使用了虚拟机中的桌面版Ubuntu,并使用SSH就像它是服务器一样。我已成功安装NginX并从我的主机查看NginX在虚拟机上提供的静态页面,使用重写规则来强制执行HTTPS协议:

server {
    listen 80;
    listen [::]:80;

    root /var/www/my_app.net/html;
    index index.html index.htm;

    server_name my_app.net;

    # redirect non-SSL to SSL
    location / {
        rewrite     ^ https://$server_name$request_uri? permanent;
    }
}

我还成功安装了所有其他依赖项并运行Meteor套件。当我在Ubuntu VM中打开Firefox并访问localhost:8080时,我可以看到Meteor正常运行。

但是,当我从主机中的浏览器连接到VM服务器时,我仍然看到静态页面,而不是Meteor页面。

Meteor网站的配置文件包含以下设置:

# HTTPS server
server {
    listen 443 ssl spdy;
    server_name my_app.net;

    # ... more stuff ...

    # pass all requests to Meteor
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade; # allow websockets
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header X-Forwarded-For $remote_addr; # preserve client IP

        # this setting allows the browser to cache the application in a way compatible with Meteor
        # on every applicaiton update the name of CSS and JS file is different, so they can be cache infinitely (here: 30 days)
        # the root path (/) MUST NOT be cached
        if ($uri != '/') {
            expires 30d;
        }
    }
}

(完整版here

我不喜欢货物狂热编程:我更喜欢理解我从教程中复制和粘贴的任何代码。

我了解行proxy_pass http://127.0.0.1:8080旨在将我在localhost:8080内部可以看到的输出映射到HTTPS端口443。

现在,我想从等式中删除Meteor站点(因为该部分正在运行)。我想使用提供给127.0.0.1:8080的静态HTML页面创建一个简单的设置,以便我可以理解proxy_pass功能如何将页面传递到端口443。

如何设置配置文件以在localhost:8080内部和https://my_meteor_app.net外部显示简单的HTML页面?

1 个答案:

答案 0 :(得分:0)

您可以添加一个侦听端口8080的新服务器块,并从某个目录中提供静态文件:

server {
    listen 8080;

    root /var/www/temporary/site;
    index index.html index.htm;

    # redirect non-SSL to SSL
    location / {
        try_files $uri $uri/;
    }
}

假设您没有更改ssl终止块(侦听443并且代理传递到127.0.0.1:8080),那么上面的块应该在本地工作并部署到您的域。