与反向代理NGINX多个服务器块(NGINX multiple server blocks with

2019-08-04 04:49发布

我正在运行的nginx + PHP + MySQL和Tomcat的+ postresql在Windows(我知道它不是一个很好的利用资源,我只需要他们都对某些项目)。

我需要与nginx的配置一点帮助。 我终于打算在端口80上运行Nginx的地方wiki.example.com和site.example.com是相同的IP。 但我想在本地主机转发的site.example.com到Tomcat的请求:8080,和wiki.example.com请求将由nginx的供应。

我知道我的问题出在配置,仅仅是因为我可以看到在控制台中的错误; 我不能设置两个“位置/”设置,即使它们是在不同的服务器块。 这里是我的配置,没有人知道如何解决它?

http {
include       mime.types;
default_type  application/octet-stream;

server {
listen 8080 default_server;
server_name _;
server_name_in_redirect off;
root  www/html;
}

server {
    listen       wiki.example.com:8080;
    server_name  wiki.example.com;

    location / {
        #proxy_pass http://localhost:80/;
        #proxy_set_header  Host $http_host;
        root   www/wiki;
        index  index.html index.htm index.php;
    }

    location ~ .php$ {
        root           www/wiki;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
        index index.php;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

server {
    listen site.example.com:8080;
    server_name site.example.com;
    root www/html;

    location / {
        proxy_pass http://localhost:80/;
        proxy_set_header  Host $http_host;
        root   www/html;
        index  index.html index.htm index.php;
    }

    }

}

编辑:

非常感谢您的帮助。 我已经编辑根据您的指令的配置和它主要的作品! :)导航到site.example.com将加载网站(nginx的代理,并通过tomcat的服务)

导航到wiki.example.com会产生nginx的404消息,但导航到wiki.example.com/index.php?title=Main_Page将加载的mediawiki为正常。 所以似乎默认值一塌糊涂wiki服务器块。

http://pastebin.com/znT8q6WQ

这看起来像有错误的部分?

Answer 1:

根据您在你试图做什么的描述,我觉得你应该nginx.conf看起来是这样的:

http {
    include       mime.types;
    default_type  application/octet-stream;

    server {
        listen 80;
        server_name site.example.com;

        # pass all requests to service listening on port 8080

        location / {
            include /usr/local/nginx/conf/proxy.conf;
            proxy_pass http://localhost:8080;
            proxy_redirect http://localhost:8080/ http://$host;
        }
    }

    server {
        listen 80;
        server_name wiki.example.com;
        root /path/to/your/www/wiki;
        index index.html index.htm index.php;

        location / {
            try_files $uri @backend;
        }

        location @backend {
            rewrite ^ /index.php?title=$request_uri last;
        }

        # proxy to php-fpm listening on port 9000

        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }

        # your other rules here...

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root html;
        }

    }

    server {
        listen 80 default_server;
        server_name _;
        access_log off;
        return 301 $scheme://site.example.com$request_uri;
    }
}

在第一台服务器块,nginx的将侦听80端口的请求匹配“site.example.com”和代理的任何服务你在8080(Tomcat)的运行。

在第二个服务器块,nginx的将监听端口80上的请求匹配“wiki.example.com”和使用PHP(或推测PHP-FPM)监听端口9000对其进行处理。

最终的服务器块是默认的。 它也侦听端口80,并作为一个包罗万象 - 任何不符合“site.example.com”或“wiki.example.com”最终将在这里和在本例中,它只是重定向到“site.example。 COM“。

附加信息

上面说的位置块代理到后端服务包含加载在nginx的conf目录(在/ usr /本地/ nginx的/ conf目录),一个“proxy.conf” include语句。 下面是一个例子“proxy.conf”配置集我使用指定代理参数 - 如果你不使用一个单独的配置文件,您可以指定行内:

proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 32m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k; 

编辑:

更新的服务器块码例如用于“wiki.example.com”。 我会建议为清晰起见,你指定你的目录的绝对路径,所以你和nginx的确切地知道在哪里可以找到它的文件系统上。 此外,在更新的代码中,@backend块将重定向和传递的nginx不能找到匹配的媒体维基index.php文件来处理所有的请求。 这也可以让你用干净的网址,如“wiki.example.com/Main_Page”(这将得到改写为“wiki.example.com/index.php?title=Main_Page”)。



文章来源: NGINX multiple server blocks with reverse proxy
标签: tomcat nginx