代码之家  ›  专栏  ›  技术社区  ›  Dmitrii Dushkin

nginx的apache和终极配置,以正确的方式为所有虚拟主机提供服务

  •  10
  • Dmitrii Dushkin  · 技术社区  · 14 年前

    我刚刚设置了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
    

    因此,我设置了nginx来处理一个站点(sky2high.net),创建了下一个配置文件(/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可以帮助处理来自所有虚拟主机(域)的所有请求,并以正确的方式服务它们?我的意思是,这个选项不允许为每个虚拟主机写单独的配置文件(所有这一切都是双重的,比如根和索引选项),但只允许为所有虚拟主机写一个?

    我应该把问题转移到服务器故障吗?

    更新: 嗯…我不知道它是怎么工作的,但它是。我已经创建了下一个配置文件:

    /等/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启用/默认

    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:或者它不工作!我在控制台中看到了“top”,并认为Apache不仅为PHP请求提供服务,而且还为静态内容提供服务。=(

    2 回复  |  直到 14 年前
        1
  •  7
  •   Maarten    14 年前

    现在您要做的是将所有网络流量发送到127.0.0.1:8080,而不允许nginx提供静态文件。

    您应该尝试以下操作:

    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;
    

    这应该对你有用

        2
  •  2
  •   Pablo Olmos de Aguilera C.    13 年前

    只是我的两分钱,在大多数情况下,没有必要具体说明 listen 80 .

    来源: Nginx common Pitfalls