我对 NGINX 完全陌生,从未接触过它,然而我遇到了一种小情况,在网上查找资料后发现需要使用它。
我的情况是这样的:
我有一台服务器 (Windows Server),我想运行两台 FTP 服务器和两台 Web 服务器。现在,我知道我不能在同一个端口上托管两个应用程序(比如两个 Web 服务器都使用端口 80 等),因此我必须将它们放在不同的端口上。
对于这种情况,假设我有两个子域one.example.com
和two.example.com
。这两个子域都指向我的服务器的 IP 地址1.2.3.4
。在任何正常情况下,都可以通过任一子域在我分配的不同端口上访问任一 Web 服务器和任一 FTP 服务器。这不是我想要的。
我想要做的是在一个子域上、在端口 21 和 80 上拥有一个 FTP 服务器和一个 Web 服务器,在另一个子域上、在端口 21 和 80 上拥有另一个 FTP 服务器和 Web 服务器。
据我所知,我需要确保您只能访问某些子域上的某些内容(过滤器),并且这些内容的端口(21 和 80)会转换为服务器上的其他端口(因为您不能在一个端口上驻留两个应用程序)。
如果可以的话,我想在 Windows 服务器上运行 NGINX,但如果不行,我真的需要在像 Raspberry Pi 这样小的东西上运行它,即使这需要我的 Pi 作为互联网和我的网络之间的网关。
编辑:这里需要我注意的是,我打算在这个服务器上运行的不仅仅是 FTP 和 HTTP,所以这个端口转换和域过滤需要在任何类型的套接字应用程序上工作,而不仅仅是 FTP、HTTP 等。如果 NGINX 不是解决方案,任何其他可行的解决方案都可以。
答案1
ngnix 在 Linux 上要容易得多 - 至少从文档上看是这样。不过我感觉我们必须从头开始。ngnix 通常开箱即用,但您需要单独设置 php 之类的东西 - 没有 mod 代理等价物。
在任何现代 HTTP 服务器有一些虚拟主机。在 ngnix 中,您可以将它们设置为单个文件或单独的文件。这种方法在 FTP 上不起作用 - 但有解决方法。(Ngnix 称之为服务器块,但区别是一样的)。
只需在 ftp 中拥有具有不同用户名、密码和 rood 目录的单独帐户即可。
虚拟主机仅适用于 http 和 https,基本上是一种将不同域上的流量引导到不同路由的方式,让您根据主机名在不同的根目录上运行多个服务。例如,您可以在同一台服务器上运行两个 wordpress 实例,其中的文件大多是独立的。
我很懒 - 每个域都有一个配置文件。如果您在 Windows 上运行此程序 - 请查阅相应的文档以了解详细信息。
您需要找到每个站点的配置文件的位置 - 我的位于 /etc/ngnix/sites-available,并且这些文件与 sites-enabled 有符号链接。这可能基于平台
你会总是那里有一个合理且应该可以工作的默认设置。它很无聊,你可以通读它以了解各种选项是什么。
您可以编辑该文件(我不推荐这样做)或在同一文件夹中为每个站点创建一个配置文件。这是我使用的一个例子。这个覆盖默认值
server {
listen 80;
listen [::]:80;
root /var/www/html/new;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html index.php;
server_name new.example.com;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# pass the PHP scripts to FastCGI server via unix socks
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
因此,或多或少,我告诉它监听 ipv4 和 6 上的 80 端口,告诉它要监听的主机名,以及其他一些与 php 相关的杂项。
如果我更改根目录并将 new.example.com 与 new2.example.com 交换,然后更改根目录,它会将对 new2.example.com 的任何请求发送到新根目录中的内容。例如,您可以通过这种方式在同一台服务器上使用不同的域运行 2 个 wordpress 副本。我在 sites-enabled 中为每个域创建了适当的 server_name 和根目录,将它们符号链接到启用的站点(在 Windows 中可能工作方式不同),然后重新加载我的 nginix 配置。
假设你正在尝试代理人您将在不同的端口上拥有一台或多台服务器。ngnix 位于前端以引导流量
server {
listen 80;
listen [::]:80;
server_name matrix.example.com;
location /_matrix {
proxy_pass http://localhost:8008;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
考虑一下这个配置文件——我不确定它是否真的能工作(我运行的是启用 HTTPS 的版本),但这就是文档是。它将监听端口 80,用于域 matrix.example.com。