2

さまざまな URI リクエストをさまざまな EC2 コンテナーにリダイレクトしようとしています。Apache へのキャッチオール リバース プロキシとして何年も nginx を使用してきましたが、nginx レベルでいくつかの書き換えを行いたいと考えています。

これが私が達成しようとしていることです:

server {
    listen       80;
    server_name  _;

    gzip              on;
    gzip_static       on;
    gzip_buffers      16 8k;
    gzip_comp_level   9;
    gzip_http_version 1.0;
    gzip_min_length   0;
    gzip_types        text/plain text/css application/x-javascript;
    gzip_vary         on;

    location / { 
        # catch the following URI's including homepage: /contact.html, /terms.html, /
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_read_timeout 240;
        proxy_connect_timeout 240;
        proxy_send_timeout 240;

        send_timeout 240;
        proxy_pass http://servers_static;
    }

    location / { 
        # catch everything not matched above
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_read_timeout 240;
        proxy_connect_timeout 240;
        proxy_send_timeout 240;

        send_timeout 240;
        proxy_pass http://servers_dynamic;
    }
}

これは単純な正規表現の問題だと確信していますが、そのことを理解したことがありません。誰かが私を助けることができますか?

4

2 に答える 2

2

共通のプロキシ設定を使用してファイル/etc/ nginx/EC2を作成します。

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 240;
proxy_connect_timeout 240;
proxy_send_timeout 240;
send_timeout 240;

メインの設定は次のようになります。

server {
  listen       80;
  server_name  _;

  #gzip settings cut for brevity, add them back in     

  # static content
  location = / {include /etc/nginx/EC2; proxy_pass http://servers_static;}
  location = /contact.html {include /etc/nginx/EC2; proxy_pass http://servers_static;}
  location = /terms.html {include /etc/nginx/EC2; proxy_pass http://servers_static;}

  # dynamic content
  location / { include /etc/nginx/EC2; proxy_pass http://servers_dynamic; }
}

次のように、.html静的コンテンツページの場所を組み合わせることもできます。

  location ~ (contact|terms).html {
    include /etc/nginx/EC2; proxy_pass http://servers_static;}

正確に一致する場所を用意する方がおそらく少し効率的です。多くの重複が必要ない限り、結果として生じる重複によって構成が扱いにくくならないようにする必要があります。

于 2012-10-13T08:01:28.437 に答える
0

をご覧くださいtry_files。指定したパスを連続して試行します。この例では、任意の静的ファイル/var/www/sites/foo/current/public/$uriが返され、静的ファイルが存在しない場合にのみリクエストがアプリにルーティングされます。

upstream app {
  server unix:/tmp/.sock_my_app;
}

server {
  # path for static files
  root /var/www/sites/foo/current/public;

  # Prefer to serve static files directly from nginx to avoid unnecessary
  # requests to the application server.
  try_files $uri/index.html $uri.html $uri @app;

  location @app {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    # timeouts

    # reverse proxy to an upstream
    proxy_pass http://app;
  }
}
于 2012-10-13T06:25:26.777 に答える