nginx 反向代理和 apache 后端位于不同的主机上 - 所有请求都发往同一个 apache vhost

nginx 反向代理和 apache 后端位于不同的主机上 - 所有请求都发往同一个 apache vhost

设想

我想配置一个专用的 nginx 反向代理,作为运行传统 lamp 堆栈的多个后端服务器的网关。

我想让 example.com 和 mydomain.com 的所有子域的所有请求都转到 nginx 机器,并将请求发送到正确的后端。目前,我只有一个运行 apache 2.4 和两个虚拟主机的后端服务器,我对两个子域发出的所有请求都返回同一个 apache 虚拟主机的内容。

简而言之:site1.example.com 和 site1.mydomain.com 始终返回在 apache vhost 中为 site1.example.com 配置的站点

当我跟踪两个 nginx vhosts 的访问日志时,我看到请求来自两个都vhosts 如果我请求 site1.mydomain.com,则会在两个 vhost 之间反弹单独的请求,因此似乎我的 nginx 配置有问题。

nginx 和 apache 机器通过 VLAN 进行通信,nginx 位于 192.168.1.2,apache 机器位于 192.168.1.3

Nginx 配置

backend_01 配置文件

server {
  server_name site1.example.com;

        location / {
          # app1 reverse proxy
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_pass http://192.168.1.3:80;
        }

   access_log      /var/log/nginx/site1.example.com_access.log;
   error_log       /var/log/nginx/site1.example.com_error.log;

}

server {
  server_name site1.mydomain.com;

        location / {
          # app2 reverse proxy
          proxy_pass http://192.168.1.3:80;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

   access_log      /var/log/nginx/site1.mydomain.com_access.log;
   error_log       /var/log/nginx/site1.mydomain.com_error.log;

}

Apache 配置

site1.example.com 的虚拟主机

<VirtualHost 192.168.1.3:80>

  ServerName site1.example.com
  ServerAlias *.site1.example.com

  DocumentRoot /path/to/docroot
  <Directory /path/to/docroot>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    allow from all
    Require all granted
  </Directory>

    LogLevel error
    ErrorLog /var/log/apache2/site1.example.com_error.log
    CustomLog /var/log/apache2/site1.example.com_access.log combined

</VirtualHost>

site1.mydomain.com 的虚拟主机

<VirtualHost 192.168.1.3:80>

  ServerName site1.mydomain.com
  ServerAlias *.site1.mydomain.com

  DocumentRoot /path/to/docroot
  <Directory /path/to/docroot>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    allow from all
    Require all granted
  </Directory>

    LogLevel error
    ErrorLog /var/log/apache2/site1.mydomain.com_error.log
    CustomLog /var/log/apache2/site1.mydomain.com_access.log combined

</VirtualHost>

我曾尝试设置默认nginx 配置文件中的一个 servername 指令中的标志,但这并没有改变任何东西。nginx.conf 文件没有被操纵,所以我不认为有什么原因导致了这个问题,但为了以防万一,我还是会把它包括在内。

nginx.conf

user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # nginx-naxsi config
    ##
    # Uncomment it if you installed nginx-naxsi
    ##

    #include /etc/nginx/naxsi_core.rules;

    ##
    # nginx-passenger config
    ##
    # Uncomment it if you installed nginx-passenger
    ##

    #passenger_root /usr;
    #passenger_ruby /usr/bin/ruby;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}


#mail {
#   # See sample authentication script at:
#   # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#   # auth_http localhost/auth.php;
#   # pop3_capabilities "TOP" "USER";
#   # imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#   server {
#       listen     localhost:110;
#       protocol   pop3;
#       proxy      on;
#   }
# 
#   server {
#       listen     localhost:143;
#       protocol   imap;
#       proxy      on;
#   }
#}

我尝试设置默认服务器并添加听 80到虚拟主机,但这对我来说不起作用。

我还想补充一点,我对 nginx 还很陌生,可能会忽略一些非常明显的东西。

系统信息:

Ubuntu 服务器 14.04 - 3.12.46-guest-39-a97a54c-x86_64 #4 SMP 2015 年 8 月 10 日星期一 11:59:25 UTC x86_64 x86_64 x86_64 GNU/Linux

nginx 版本:nginx/1.4.6(Ubuntu)

答案1

解决了。

我在后端和反向代理之间命名不匹配。应用程序@site1.mydomain.com配置错误。不管怎样,如果你注意命名,上述配置将会起作用全部设置的各个方面,这样它可能会帮助一些将来想要设置这种东西的人。

相关内容