![Nginx:重定向到(私有 IP)虚拟机](https://linux22.com/image/1459034/Nginx%EF%BC%9A%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%EF%BC%88%E7%A7%81%E6%9C%89%20IP%EF%BC%89%E8%99%9A%E6%8B%9F%E6%9C%BA.png)
我想为实验室的同事设置一套 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/wiki
或localhost/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;