nginx配置

结构

最外层包裹Http,

    头部设置gzip,cache-corntrol等信息

然后内部每个域名对应一个server

    http{

        gzip on; gzip_min_length 2k; gzip_buffers 4 16k; gzip_http_version 1.0;     gzip_comp_level 3; gzip_types text/plain application/x-javascript text/css     application/xml text/javascript application/x-httpd-php image/jpeg image/gif     image/png; gzip_vary on; 

    add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X-Requested-With; add_header Access-Control-Allow-Methods GET,POST,OPTIONS;  

            server{

                    listen 80        ;                //一般http的对外暴露的接口

                        root  /usr/share/nginx     ;//设置的目录 (当是对端口进行域名代理的时候 可以不用);

                                                       

        }

}  


1:根域名和二级域名

        @和www都要配



2:配置PHP环境


3:配置目录访问

 使用alias时,目录名后面一定要加"/" 访问时会被替换掉 而root可不加

location /name{

            alias /实际访问的目录/

           try_files $uri  $uri/  /实际文件夹名称/index.html;

    }     

如果当前目录下 则不需要alias

4:配置端口访问和正向代理

listen 80;

server_name  node.sss.com;

     location /second/ {

            proxy_pass http://127.0.0.1:2222/;

            proxy_redirect  off;

            proxy_set_header Upgrade $http_upgrade;

            proxy_set_header Connection 'upgrade';

            proxy_set_header Host $host;

            proxy_cache_bypass $http_upgrade;

        }

看是否带uri

如果只是域名+端口 则为不带uri 为添加

带/或者之后有啥对象 就是替换


proxy_pass 后面带/代表根目录 不会带上location的

 不带/代表相对路径 会在路径前面加上

5:缓存设置



规则等:

    一 Nginx的location语法

1location [=|~|~*|^~] /uri/ { … }

=         严格匹配。如果请求匹配这个location,那么将停止搜索并立即处理此请求

~         区分大小写匹配(可用正则表达式)

~*       不区分大小写匹配(可用正则表达式)

!~       区分大小写不匹配

!~*     不区分大小写不匹配

^~      如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式

示例1:

location  / { }

匹配任意请求

 示例2:

location ~* .(gif|jpg|jpeg)$ {

    rewrite .(gif|jpg|jpeg)$ /logo.png;}

不区分大小写匹配任何以gif、jpg、jpeg结尾的请求,并将该请求重定向到 /logo.png请求

示例3:

location ~ ^.+\.txt$ {

    root /usr/local/nginx/html/;}

区分大小写匹配以.txt结尾的请求,并设置此location的路径是/usr/local/nginx/html/。也就是以.txt结尾的请求将访问/usr/local/nginx/html/ 路径下的txt文件

二 alias与root的区别

root    实际访问文件路径会拼接URL中的路径

alias   实际访问文件路径不会拼接URL中的路径

示例如下:

location ^~ /sta/ { 

  alias /usr/local/nginx/html/static/; 

}

请求:http://test.com/sta/sta1.html

实际访问:/usr/local/nginx/html/static/sta1.html 文件

location ^~ /tea/ { 

  root /usr/local/nginx/html/;  }

请求:http://test.com/tea/tea1.html

实际访问:/usr/local/nginx/html/tea/tea1.html 文件

三 last 和 break关键字的区别

(1)last 和 break 当出现在location 之外时,两者的作用是一致的没有任何差异

(2)last 和 break 当出现在location 内部时:

last        使用了last 指令,rewrite 后会跳出location 作用域,重新开始再走一次刚才的行为

break    使用了break 指令,rewrite后不会跳出location 作用域,它的生命也在这个location中终结

四 permanent 和 redirect关键字的区别

rewrite … permanent   永久性重定向,请求日志中的状态码为301

rewrite … redirect         临时重定向,请求日志中的状态码为302

五 综合实例

将符合某个正则表达式的URL重定向到一个固定页面

比如:我们需要将符合“/test/(\d+)/[\w-\.]+” 这个正则表达式的URL重定向到一个固定的页面。符合这个正则表达式的页面可能是:http://test.com/test/12345/abc122.html、http://test.com/test/456/11111cccc.js等

从上面的介绍可以看出,这里可以使用rewrite重定向或者alias关键字来达到我们的目的。因此,这里可以这样做:

(1)使用rewrite关键字:

location ~ ^.+\.txt$ {

    root /usr/local/nginx/html/;}

location ~* ^/test/(\d+)/[\w-\.]+$ {    rewrite ^/test/(\d+)/[\w-\.]+$ /testpage.txt last;

}

这里将所有符合条件的URL(PS:不区分大小写)都重定向到/testpage.txt请求,也就是 /usr/local/nginx/html/testpage.txt 文件

(2)使用alias关键字:

location ~* ^/test/(\d+)/[\w-\.]+$ {    alias /usr/local/nginx/html/static/sta1.html;

}




~ 和 ~* 为正则location

=、^~、@和无任何前缀的都属于普通location,另外,@是用作服务端内部的一种转发行为,很少用,在此不做讨论。


先普通,再正则

普通location之间的匹配顺序:按最大前缀匹配 //越多越好

如location /a/{},location /a/b/ {},请求 http://a/b/c.html 匹配的是 location /a/b/ {}

正则location之间的匹配顺序:按配置文件中的物理顺序匹配,只要匹配到一条正则,就不再考虑后面的

若普通location匹配到 精确匹配= 或 非正则匹配 ^~, 则不再进行后续的正则匹配

普通location与正则location之间的匹配结果选择

普通location先匹配,匹配到了结果,只是一个临时结果;

会继续正则location的匹配,

如果匹配到正则,则用匹配到的正则结果;

如果没有匹配到正则,则继续用普通匹配的那个结果

综上,常规的顺序是匹配完普通location,还要继续匹配正则location,但是,也可以告诉nginx,匹配到了普通location,就不要再搜索匹配正则location了,通过在普通location前面加上^~符号,^表示非,~表示正则,^~就是表示不要继续匹配正则。

除了^~,=也可阻止nginx继续匹配正则,区别在于^~依然遵循最大前缀匹配规则,而=是严格匹配


普通优先 匹配到 则不匹配正则

正则如果匹配到就结束 不再继续匹配

你可能感兴趣的:(nginx配置)