欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Nginx 多server配置

程序员文章站 2024-02-21 11:28:40
...
nginx 支持laravel配置
server {
    listen       80;
    server_name  *.dev.laravel;
    if ($host ~ ^(.*)\.dev\.laravel$ )  
    {
        set $app  $1; 
        set $path /data/www/learn/laravel/$1/public;  
    } 
    root $path;
    keepalive_timeout   0;
    client_max_body_size    1000m;

    location / {
        index default.php index.php index.html index.htm;
        try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ \.php/?.*$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
    error_log /var/nginx/dev.laravel.error.log;  
    access_log off;
}
zend_framework nginx配置
server {
  listen 80;
  server_name servername.com;
  root /data/www/zendapp/public;
  location / {
    index index.php;
  }

  # Deny access to sensitive files.
  location ~ (\.inc\.php|\.tpl|\.sql|\.tpl\.php|\.db)$ {
    deny all;
  }
  location ~ \.htaccess {
    deny all;
  }

  # Rewrite rule adapted from zendapp/public/.htaccess
  if (!-e $request_filename) {
    rewrite ^.*$ /index.php last;
  }
  #图片/js/css不显示解决
  location ~* ^.+\.(js|ico|gif|jpg|jpeg|pdf|png|css)$ {
    access_log   off;
    expires      7d;
  }
  # PHP scripts will be forwarded to fastcgi processess.
  # Remember that the `fastcgi_pass` directive must specify the same
  # port on which `spawn-fcgi` runs.
  location ~ \.php$ {
    include        fastcgi_params;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
  }

  location = /50x.html {
      root   /var/www/default;
  }
}

Nginx 不支持 Apache 的 .htaccess 文件,所以需要在 Nginx 配置文件中编写重写规则。Apache 的绝大部分 RewriteRule 命令都可以不做修改的放到 Nginx 中直接使用。你只要把 RewriteRule 改成 rewrite,[L] 改成 last 之类的就可以了,具体可以看一下 Nginx 的 Rewrite 文档。

 

Nginx部署ThinkPHP项目的办法网上通用解决方法的配置如下

server {
    listen 80;
    server_name *.dev.tp5;
    if ($host ~ ^(.*)\.dev\.tp5$ )
    {
        set $app     $1;
        set $path    /data/www/$1;
    }
    root $path;
    location / {
        index  index.htm index.html index.php;
        #访问路径的文件不存在则重写URL转交给ThinkPHP处理
        if (!-e $request_filename) {
           rewrite  ^/(.*)$  /index.php/$1  last;
           break;
        }
    }
    location ~ \.php/?.*$ {
        fastcgi_pass   127.0.0.1:9000;#php-fpm调用listen
        fastcgi_index  index.php;
        #加载Nginx默认"服务器环境变量"配置
        include        fastcgi.conf;
        
        #设置PATH_INFO并改写SCRIPT_FILENAME,SCRIPT_NAME服务器环境变量
        set $fastcgi_script_name2 $fastcgi_script_name;
        if ($fastcgi_script_name ~ "^(.+\.php)(/.+)$") {
            set $fastcgi_script_name2 $1;
            set $path_info $2;
        }

        #项目命名空间设置
        fastcgi_param   PATH_INFO $path_info;
        fastcgi_param   SCRIPT_FILENAME   $document_root$fastcgi_script_name2;
        fastcgi_param   SCRIPT_NAME   $fastcgi_script_name2;
    }
    #网站单独的日志文件
    error_log /var/log/nginx/dev.tp5.error.log;
    access_log /var/log/nginx/dev.tp5.access.log main;
}
nginx支持YII配置
server
{
    listen 80;
    server_name *.dev.yii;
    index index.php;

    if ($host ~ ^(.*)\.dev\.yii$ )
    {
        set $app     $1;
        set $path    /data/www/$1;
        set $webpath $path/htdocs;
    }
    root $webpath;
    if (!-e $request_filename) {
     	rewrite ^.*$ /index.php last;
    }

    location ~ \.(htm|html|js|css|gif|jpg|png|swf|ico|woff|eot|ttf|svg)$
    {
        root $webpath;
    }
    location / {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index  index.php;
        include        fastcgi_params;
    }
    error_log /var/nginx/dev.yii.error.log;
    access_log /var/nginx/dev.yii.access.log main;
}

nginx多server

1.检查/etc/nginx/nginx.conf配置文件,确保文件中有:include /etc/nginx/servers/*.conf;  

user www;
worker_processes  2;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
    debug_connection 127.0.0.1;
    debug_connection 192.168.1.0/24;
}
http {
    include       /etc/nginx/mime.types;
    #  ......
    server {
        listen       80;
        server_name  localhost;

        location / {
            root /data/www/; # 该项要修改为你准备存放相关网页的路径
            index  index.html index.htm home.php default.php index.php;
        }
    
        #pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include /usr/local/etc/nginx/fastcgi.conf;
        }
    }
    include /etc/nginx/servers/*.conf;
}

 2.关键步骤,在目录/etc/nginx/servers/下面新建文件site1.conf,site2.conf,文件名任意写,自己看明白就OK,后缀名需要与步骤1配置的一致,这里为.conf

 

在一个server块中配置多个站点.server_name指令的正则表达式应用

server 
{ 
    listen 80; 
    server_name ~^(www\.)?(.+)$; 
    index index.php index.html; 
    root /data/wwwsite/$2; 
} 
 站点的主目录应该类似于这样的结构:
/data/wwwsite/ssdr.info 
/data/wwwsite/linuxtone.org 
/data/wwwsite/baidu.com 

本例中正则表达式捕获组创建了变量,普通的正则表达式捕获组可以创建$0、$1、…、$9这10个变量。$0表示原串,$1-$9表示第一到第九个匹配组的内容。

 

在一个server块中为一个站点配置多个二级域名 。

实际网站目录结构中我们通常会为站点的二级域名独立创建一个目录,同样我们可以使用正则的捕获来实现在一个server块中配置多个二级域名:

server 
{ 
    listen 80; 
    server_name ~^(.+)?\.ssdr\.info$; 
    index index.html; 
    if ($host = ssdr.info){
    	rewrite ^ http://www.ssdr.info permanent;
    } 
    if ($host ~ ^(.*)\.ssdr\.info$ )
       set $domain $1; 
    } 
    root /data/wwwsite/ssdr.info/$domain/; 
}

站点的目录结构应该如下:

/data/wwwsite/ssdr.info/www/ 
/data/wwwsite/ssdr.info/nginx/ 

这样访问www.ssdr.info时root目录为/data/wwwsite/ssdr.info/www/,nginx.ssdr.info时为/data/wwwsite/ssdr.info/nginx/,以此类推。后面if语句的作用是将ssdr.info的方位重定向到www.ssdr.info,这样既解决了网站的主目录访问,又可以增加seo中对www.ssdr.info的域名权重。注意: 通配符名字只可以在名字的起始处或结尾处包含一个星号,并且星号与其他字符之间用点分隔。所以,“www.*.example.org”和“w*.example.org”都是非法的。

多个正则表达式
果你在server_name中用了正则,而下面的location字段又使用了正则匹配,这样将无法使用$1,$2这样的引用,解决方法是通过set指令将其赋值给一个命名的变量
server
{
	 listen      80;
	 server_name ~^(.+)?\.sklinux\.com$;
	 set $www_root $1;
	 root /data/www/sklinux.com/$www_root/;
	 location ~ .*\.php?$ {
		 fastcgi_pass   127.0.0.1:9000;
		 fastcgi_index  index.php;
		 fastcgi_param  SCRIPT_FILENAME /data/www/sklinux.com/$fastcgi_script_name;
		 include        fastcgi_params;
	 }
}
nginx 无法加载css/js/gif/png等图片等文件
location ~ .*\.(js|css|png|jpg|gif)$ {
    root /home/xiaxt_web/wordpress; #站点根目录
    if (-f $request_filename) {
        expires 1d;
        break;
    }
}
如何解决nginx上传大文件的限制:打开nginx主配置文件nginx.conf,一般在/usr/local/nginx/conf/nginx.conf这个位置,找到http{}段,修改或者添加
client_max_body_size 30m; 
 30m表示最大上传30M,需要多大设置多大。然后重启nginx
nginx 禁止对.svn 目录访问
location ~* /(\.svn|CVS|Entries){
    deny all;
}
 nginx内置变量
$args                    #请求中的参数值
$query_string            #同 $args
$arg_NAME                #GET请求中NAME的值
$is_args                 #如果请求中有参数,值为"?",否则为空字符串
$uri                     #请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改,$uri不包含主机名,如"/foo/bar.html"。
$document_uri            #同 $uri
$document_root           #当前请求的文档根目录或别名
$host                    #优先级:HTTP请求行的主机名>"HOST"请求头字段>符合请求的服务器名
$hostname                #主机名
$https                   #如果开启了SSL安全模式,值为"on",否则为空字符串。
$binary_remote_addr      #客户端地址的二进制形式,固定长度为4个字节
$body_bytes_sent         #传输给客户端的字节数,响应头不计算在内;这个变量和Apache的mod_log_config模块中的"%B"参数保持兼容
$bytes_sent              #传输给客户端的字节数
$connection              #TCP连接的***
$connection_requests     #TCP连接当前的请求数量
$content_length          #"Content-Length" 请求头字段
$content_type            #"Content-Type" 请求头字段
$cookie_name             #cookie名称
$limit_rate              #用于设置响应的速度限制
$msec                    #当前的Unix时间戳
$nginx_version           #nginx版本
$pid                     #工作进程的PID
$pipe                    #如果请求来自管道通信,值为"p",否则为"."
$proxy_protocol_addr     #获取代理访问服务器的客户端地址,如果是直接访问,该值为空字符串
$realpath_root           #当前请求的文档根目录或别名的真实路径,会将所有符号连接转换为真实路径
$remote_addr             #客户端地址
$remote_port             #客户端端口
$remote_user             #用于HTTP基础认证服务的用户名
$request                 #代表客户端的请求地址
$request_body            #客户端的请求主体:此变量可在location中使用,将请求主体通过proxy_pass,fastcgi_pass,uwsgi_pass和scgi_pass传递给下一级的代理服务器
$request_body_file       #将客户端请求主体保存在临时文件中。文件处理结束后,此文件需删除。如果需要之一开启此功能,需要设置client_body_in_file_only。如果将次文件传递给后端的代理服务器,需要禁用request body,即设置proxy_pass_request_body off,fastcgi_pass_request_body off,uwsgi_pass_request_body off,or scgi_pass_request_body off
$request_completion      #如果请求成功,值为"OK",如果请求未完成或者请求不是一个范围请求的最后一部分,则为空
$request_filename        #当前连接请求的文件路径,由root或alias指令与URI请求生成
$request_length          #请求的长度 (包括请求的地址,http请求头和请求主体)
$request_method          #HTTP请求方法,通常为"GET"或"POST"
$request_time            #处理客户端请求使用的时间; 从读取客户端的第一个字节开始计时
$request_uri             #这个变量等于包含一些客户端请求参数的原始URI,它无法修改,请查看$uri更改或重写URI,不包含主机名,例如:"/cnphp/test.php?arg=freemouse"
$scheme                  #请求使用的Web协议,"http" 或 "https"
$server_addr             #服务器端地址,需要注意的是:为了避免访问linux系统内核,应将ip地址提前设置在配置文件中
$server_name             #服务器名
$server_port             #服务器端口
$server_protocol         #服务器的HTTP版本,通常为 "HTTP/1.0" 或 "HTTP/1.1"
$status                  #HTTP响应代码
$time_iso8601            #服务器时间的ISO 8610格式
$time_local              #服务器时间(LOG Format 格式)
$cookie_NAME             #客户端请求Header头中的cookie变量,前缀"$cookie_"加上cookie名称的变量,该变量的值即为cookie名称的值
$http_NAME               #匹配任意请求头字段;变量名中的后半部分NAME可以替换成任意请求头字段,如在配置文件中需要获取http请求头:"Accept-Language",$http_accept_language即可
$http_cookie
$http_post
$http_referer
$http_user_agent
$http_x_forwarded_for
$sent_http_NAME          #可以设置任意http响应头字段;变量名中的后半部分NAME可以替换成任意响应头字段,如需要设置响应头Content-length,$sent_http_content_length即可
$sent_http_cache_control
$sent_http_connection
$sent_http_content_type
$sent_http_keep_alive
$sent_http_last_modified
$sent_http_location
$sent_http_transfer_encoding
 
 
 
 
 
相关标签: nginx PHP Windows