将端口80请求重定向到基于路径的不同应用程序

时间:2015-11-16 21:41:48

标签: nginx

我需要在同一台服务器上安装uWSGI应用程序和Kibana4 /弹性搜索堆栈。当用户通过[server_IP] / charts /访问服务器时,只需要使用uwsgi应用程序,并且我希望通过[Server_IP]访问Kibana4。

两者都通过他们自己独立的conf文件监听端口80,并且可以预见,uwsgi应用程序不允许Kibana4接收请求。

如何调整我的conf文件以允许我需要的访问权限?我对我需要使用什么感到困惑(重写,重定向,其他什么?)

感谢您的时间

nginx_conf_for_uwsgi:

server {
    server_name           192.168.250.37;
    listen                80;
    root                  /usr/local/wsgi;
    access_log            /var/log/nginx/graph_server/access.log;
    error_log             /var/log/nginx/graph_server/error.log;
    client_max_body_size  500M;
    proxy_read_timeout    600;

location / {
    include             uwsgi_params;
    uwsgi_pass          192.168.250.37:9091;
    uwsgi_read_timeout  600;
    }
}

kibana4.conf:

server {
    listen 80;

    server_name 192.168.250.37;

    #auth_basic "Restricted Access";
    #auth_basic_user_file /etc/nginx/htpasswd.users;

    location / {
        proxy_pass http://192.168.250.37:5601;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

nginx.conf:

user              nginx;
worker_processes  4;
error_log         /var/log/nginx/error.log;
pid               /run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    index         index.html index.htm;

    # Increase header buffer size (needed for PHP)
    proxy_buffer_size        128k;
    proxy_buffers            4 256k;
    proxy_busy_buffers_size  256k;

    # Update the logs to display the real IP address after removing the IP for
    # the load balancers
    set_real_ip_from   redacted;  # a
    set_real_ip_from   redacted;  # b
    real_ip_header     X-Forwarded-For;
    real_ip_recursive  on;

    # Custom logger to display the subdomain folder (if applicable)
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    log_format  log_thing '$remote_addr - $remote_user [$time_local] '
                               '"$request" $status $body_bytes_sent '
                               '"$http_referer" "$http_user_agent" '
                               '"$http_x_forwarded_for" sub:"$subdomain"';
    log_format  i_server  '$remote_addr - $remote_user [$time_local] '
                               '"$request" $status $body_bytes_sent '
                               'filename:"$http_filename"';

    access_log  /var/log/nginx/access.log  main;

    sendfile           on;
    keepalive_timeout  65;

    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        server_name  localhost;
        root         /usr/share/nginx/html;

        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page  404              /404.html;
        location = /40x.html {
        }

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

1 个答案:

答案 0 :(得分:3)

一种方法是使用nginx作为反向代理,这实际上就是你正在做的事情。通过这种方式,您可以在端口80上侦听一个nginx虚拟主机,该虚拟主机会转发不同的位置,以分离监听系统上不同端口的nginx虚拟主机。

你的nginx反向代理vhost看起来像这样,如果所有位置都与它们一起工作,3个proxy_set_header行可以移动到服务器块

server {
listen 80;
server_name 192.168.250.37;
port_in_redirect off

location / {
    proxy_pass http://127.0.0.1:8081;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

location /charts {
    proxy_pass http://127.0.0.1:8082;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

然后改变你Kibanaconf听8081端口和uwsgi听8082

或者,您可以将两个vhost合并为一个,并且需要为每个位置下的根文件夹设置自定义别名并重新排列。

server {
listen 80;

server_name 192.168.250.37;
root  /usr/local/wsgi;
client_max_body_size  500M;
proxy_read_timeout    600;
#auth_basic "Restricted Access";
#auth_basic_user_file /etc/nginx/htpasswd.users;

location / {
    proxy_pass http://192.168.250.37:5601;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

location /charts {
    include             uwsgi_params;
    uwsgi_pass          192.168.250.37:9091;
    uwsgi_read_timeout  600;
    }
}