Nginx:重定向到(私有 IP)虚拟机

Nginx:重定向到(私有 IP)虚拟机

我想为实验室的同事设置一套 Web 服务;简单的东西,如 wiki、cms、git 等,以便我们能够更好地记录我们的项目。我是一名物理学家,不是计算机科学专家,所以如果我错过了一些显而易见的东西,我很抱歉。

这些服务将位于同一个(公共)IP 地址后面。为此,我将虚拟机设置为服务提供商,并在主机上安装 Nginx,以将相应的调用重定向到虚拟机。

我遇到的问题似乎与主机名后使用的 (url) 路径有关。我不知道它是否与 Nginx 重定向或 Web 服务本身有关。

目前的情况如下:

  • 主机有一个公共 IP 地址,与域名相关联。为了简单起见,我在这里使用“www.example.com”。
  • 这些虚拟机都有私有 IP 地址。一台安装了 Drupal,另一台安装了 Mediawiki,第三台安装了 Gitlab。
    • “drupal”机器的 IP 为 192.168.56.20
    • “wiki”机器的 IP 为 192.168.56.11
    • “git”机器的 IP 为 192.168.56.19
  • 主机已安装(VirtualBox 除外)Nginx。我使用 Nginx 的目的是针对以下重定向提供一个简单的解决方案:
    • www.example.com/drupal ---> 转到“drupal”机器
    • www.example.com/wiki ---> 进入“wiki”机器
    • www.example.com/git ---> 进入“git”机器
  • 为了配置 Nginx,我只是修改了默认配置文件(/etc/nginx/sites-enabled/default)。

我遇到的问题: - 当我尝试访问www.example.com/wiki(从网络上的任何机器)或localhost/wiki(从主机)时,url 分别更改为(通常)www.example.com/wikilocalhost/Main_Page,并且我收到“404 Not Found”错误。 - 当我尝试时也发生了同样的情况localhost/git:重定向到后,我收到“404 Not Found”错误。 localhost/users/sign_in- 当我尝试时localhost/drupal一切正常,但直到我更改网站路径(例如,我单击“注册”按钮),然后localhost/user/register不再起作用(“404 Not Found”)。

我理解这些错误与 URL 有关。我很清楚 Nginx 不知道如何处理(例如),localhost/Main_Page因为我没有告诉他如何处理它,但我该如何修复它?我的意思是,Nginx 和服务之间谁负责这件事?

接下来是日志和配置。我对 Nginx 配置文件所做的修改取自这个教程

有什么帮助吗?提前致谢。

这是我尝试从“localhost”访问(如上所述)“/wiki”、“/git”和“/drupal(并单击‘注册’按钮)”的日志:

127.0.0.1 - - [29/Jul/2015:12:44:41 +0200] "GET /wiki HTTP/1.1" 301 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36"
127.0.0.1 - - [29/Jul/2015:12:44:41 +0200] "GET /Wiki HTTP/1.1" 404 208 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36"
127.0.0.1 - - [29/Jul/2015:12:45:17 +0200] "GET /wiki HTTP/1.1" 301 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36"
127.0.0.1 - - [29/Jul/2015:12:45:17 +0200] "GET /Main_Page HTTP/1.1" 404 208 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36"
127.0.0.1 - - [29/Jul/2015:12:45:24 +0200] "GET /git HTTP/1.1" 302 111 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36"
127.0.0.1 - - [29/Jul/2015:12:45:24 +0200] "GET /users/sign_in HTTP/1.1" 404 208 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36"
127.0.0.1 - - [29/Jul/2015:12:45:31 +0200] "GET /drupal HTTP/1.1" 200 2255 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36"
127.0.0.1 - - [29/Jul/2015:12:45:36 +0200] "GET /user/register HTTP/1.1" 404 208 "http://localhost/drupal" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36"

这是我的 Nginx 配置文件:

server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

root /usr/share/nginx/html;
index index.html index.htm;

# Make site accessible from http://localhost/
server_name localhost;

location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ =404;
    # Uncomment to enable naxsi on this location
    # include /etc/nginx/naxsi.rules
}

location /wiki {
    rewrite ^/wiki(.*) /$1 break;
    proxy_pass http://192.168.56.11;
}

location /drupal {
    rewrite ^/drupal(.*) /$1 break;
    proxy_pass http://192.168.56.20;
}

location /git {
    rewrite ^/git(.*) /$1 break;
    proxy_pass http://192.168.56.19;
}

location /google {
    rewrite ^/google(.*) /$1 break;
    proxy_pass http://www.google.com;
}

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires max;
    log_not_found off;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

}

答案1

你应该看看代理重定向说明。该文档准确涵盖了您所遇到的情况,即您希望将从代理返回的重定向响应重写为 URL 的外部视图。

你可能只需要在每个或每行中location增加一行

proxy_redirect default;

相关内容