10

1つのサイトで静的リクエストを処理するようにnginxを設定しましたが、サーバーに多数のサイトがあり、それらすべてに新しいnginxサーバー構成を正しく設定する必要がありますか?私が今していること。Apacheのすべての仮想ホストエントリを含むファイルがあります-次のようなものです:

NameVirtualHost *:8080
<VirtualHost *:8080>
 ServerName sky2high.net
 DocumentRoot /home/mainsiter/data/www/sky2high.net
</VirtualHost>

<VirtualHost *:8080>
 ServerName surdo.asmon.ru
 DocumentRoot /home/surdo/data/www/surdo.asmon.ru
</VirtualHost>

<VirtualHost *:8080>
 ServerName surdoserver.ru
 DocumentRoot /home/surdo/data/www/surdoserver.ru
</VirtualHost>

私はこれをapacheのports.confに持っています:

Listen 8080

そして、1つのサイト(sky2high.net)で動作するようにnginxを設定し、次の構成ファイル(/etc/nginx/sites-enabled/sky2high.net)を作成しました。

server {
 listen 80;
 server_name sky2high.net www.sky2high.net;
  proxy_pass http://127.0.0.1:8000;
   proxy_set_header Host $host;

 access_log /var/log/nginx.access_log;

 location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ {
  root /home/mainsiter/data/www/sky2high.net/;
  index index.php;
  access_log off;
  expires 30d;
 }
 location ~ /\.ht {
  deny all;
 }
 location / {
  proxy_pass http://127.0.0.1:8080/;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-for $remote_addr;
  proxy_set_header Host $host;
  proxy_connect_timeout 60;
  proxy_send_timeout 90;
  proxy_read_timeout 90;
  proxy_redirect off;
  proxy_set_header Connection close;
  proxy_pass_header Content-Type;
  proxy_pass_header Content-Disposition;
  proxy_pass_header Content-Length;
 }
} 

また、このドメインでは正常に機能しますが、もちろん別の仮想ホストが壊れています。

したがって、問題は次のとおりです。nginxの究極の構成オプションはありますか?witchは、すべての仮想ホスト(ドメイン)からのすべての要求を処理し、正しい方法でそれらを提供するのに役立ちますか?つまり、仮想ホストごとに個別の構成ファイルを書き込まないようにするオプション(ルートオプションやインデックスオプションなど、この2倍のオプションをすべて使用)ではなく、すべての仮想ホストに1つだけですか?

PS:質問をserverfaultに移動する必要がありますか?

更新:ええと..それはどのように機能するのだろうかと思いますが、そうです。次の設定ファイルを作成しました:

/etc/nginx/nginx.conf

user www-data;
worker_processes  2;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

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

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

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;

    gzip             on;   
    gzip_min_length  1000;
    gzip_proxied     any;
    gzip_disable     "msie6";

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

/ etc / nginx / sites-enabled / default

server {
    listen 80;

    location / {
        proxy_pass http://127.0.0.1:8080/;
        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;
        proxy_set_header Connection close;
        proxy_pass_header Content-Type;
        proxy_pass_header Content-Disposition;
        proxy_pass_header Content-Length;
    }
}

それがどのように機能するのかわかりませんが、それは...

更新2:またはそれは機能しません!私はコンソールの「トップ」を見て、apacheがphpリクエストだけでなく、静的コンテンツに対しても=(

4

2 に答える 2

7

ここで行うことは、Nginxが静的ファイルを提供することを許可せずに、すべてのネットワークトラフィックを127.0.0.1:8080に送信することです。

あなたが試してみるべきことは次のとおりです。

server {
listen 80;
server_name sky2high.net www.sky2high.net;
location / {
proxy_pass http://127.0.0.1:8080;
include /etc/nginx/conf.d/proxy.conf;
}
location ~* ^.+\.(jpg|jpeg|gif|png|ico|tgz|gz|pdf|rar|bz2|exe|ppt|txt|tar|mid|midi|wav|bmp|rtf) {
root /folder/to/static/files;
expires 90d;
}
location ~* ^.+\.(css|js)$ {
root /folder/to/static/files;
expires 30d;
}

そして、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 8m;
client_body_buffer_size 256k;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 4k;
proxy_buffers 32 256k;
proxy_busy_buffers_size 512k;
proxy_temp_file_write_size 256k;

これはあなたのために働くはずです

于 2010-10-14T17:36:59.857 に答える
2

ちょうど私の2セント、ほとんどの場合、を指定する必要はありませんlisten 80

出典:Nginxの一般的な落とし穴

于 2011-02-27T03:35:41.273 に答える