2017-10-24 14 views
1

の数が無効ですが、私はnginxのWebサーバーにレート制限のサポートを追加しようとしているが、私は次のエラーを取得しておいてください。ここでは問題は制限:引数

webserver_1 | 2017/10/24 11:27:40 [emerg] 6#6: invalid number of arguments in "limit_req_zone" directive in /etc/nginx/nginx.conf:7 
webserver_1 | nginx: [emerg] invalid number of arguments in "limit_req_zone" directive in /etc/nginx/nginx.conf:7 
isaserver_webserver_1 exited with code 1 

は私のnginxの設定ファイルです:

# normally you leave this at the default of 1024 
events { 
    worker_connections 1024; 
} 

http { 
    limit_req_zone $binary_remote_addr zone=slow:10m rate=30r/s; 

    # cf http://blog.maxcdn.com/accept-encoding-its-vary-important/ 
    gzip_vary on; 
    gzip_proxied any; 
    gzip_types *; 

    # http://nginx.org/en/docs/http/configuring_https_servers.html#optimization 
    ssl_session_cache shared:SSL:1m; 
    ssl_session_timeout 10m; 

    server_tokens off; 

    upstream django { 
     server web:8000; 
    } 

    server { 
     # rewrite all HTTP to HTTPS 
     listen 80; 
     server_name ${NGINX_SERVER_NAME}; 

     return 301 https://${NGINX_SERVER_NAME}$request_uri; 
    } 

    server { 
     listen 443 ssl default_server; 
     server_name ${NGINX_SERVER_NAME}; 

     # see http://nginx.org/en/docs/http/configuriNGINX_https_servers.html 
     ssl_certificate /etc/ssl/certs/server.crt; 
     ssl_certificate_key /etc/ssl/private/server.key; 
     ssl_client_certificate /etc/ssl/certs/ca.crt; 
     ssl_verify_client optional; 

     ssl_prefer_server_ciphers on; 
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # ie defaults minus SSLv3 

     #Prevent serving of sysfiles/vim backup files 
     location ~ /\.   { access_log off; log_not_found off; deny all; } 
     location ~ ~$   { access_log off; log_not_found off; deny all; } 

     location/{ 
      limit_req zone=slow nodelay; 

      uwsgi_pass  django; 
      include   uwsgi_params; 
     } 
    } 
} 

は、私が直接http://nginx.org/en/docs/http/ngx_http_limit_req_module.html

何時に公式ドキュメントからlimit_req_zoneコードをコピーしたので、私はこの問題を取得しています理由はわからないんだけど私は間違っている?

更新#1:以下

は、nginxのWebサーバのための私のドッキングウィンドウのファイルです:

FROM nginx:1.13.5 

# Add start script 
ADD ./webserver/config/start.sh/
RUN chmod +x start.sh 

ENV NGINX_CRT_NAME=localhost NGINX_KEY_NAME=localhost NGINX_SERVER_NAME=localhost 

# Add nginx config file 
ADD ./webserver/config/nginx.tmpl/

# Add SSL certs to location specified in nginx.conf 
ADD ./webserver/config/*.crt /etc/ssl/certs/ 
ADD ./webserver/config/*.key /etc/ssl/private/ 

# Execute start script 
CMD ["./start.sh"] 

以下ドッキングウィンドウのコンファイルです:

version: '2.1' 

services: 
    web: 
    image: xxxxxxxx/xxxxxxxxx 
    build: . 
    ports: 
     - "8000:8000" 
    extra_hosts: 
     - "DB_HOST:192.168.1.xxxxx" 

    webserver: 
    build: 
     context: . 
     dockerfile: webserver/Dockerfile # This is the above dockerfile 
    ports: 
     - "80:80" 
     - "443:443" 
    links: 
     - web:web 

私が削除した場合レート制限のための2つの回線は、サーバーが動作し、問題はありません。ただし、レート制限を有効にしようとすると、上記のエラーが発生します。

更新#2:以下

起動スクリプトです:

#!/bin/bash 
envsubst <nginx.conf> /etc/nginx/nginx.conf 

nginx -g "daemon off;" 

*私はあなたが必要

+0

あなたのイメージを再構築することがありますか? 'docker-compose build' – Robert

+0

はい、この設定ファイルからのエラーです。 –

+0

とnginxのバージョン? – Robert

答えて

0

を終了するの.confを持つようにnginxのテンプレート設定ファイルを変更した注意してください変数を何も翻訳しないテンプレート言語を使用しているため、$binary_remote_addrをエスケープします。このように多分

limit_req_zone $$binary_remote_addr zone=slow:10m rate=30r/s; 
# with this ---^ 
+0

Hmmmm追加の$記号を追加しようとしましたが、 '2017/10/24 20:22:27 [emerg] 6#6:/etc/nginx/nginx.confの変数名が無効です:7'です。また、ファイル名を 'nginx.conf'に変更しようとしましたが、それもうまくいきませんでした。興味深いことに、私が[this](https://hub.docker.com/r/sportebois/nginx-rate-limit-sandbox/)を実行すると、エラーは表示されません。 –

+0

'start.sh'とは何ですか?テンプレート言語とは何ですか? envsubst? – Robert

+0

私はstart.shコードで質問を更新しました。はい、envsubstを使用しています。 –

関連する問題