11、只允许固定ip访问网站,并加上密码
root /opt/htdocs/www;allow208.97.167.194; allow222.33.1.2; allow231.152.49.4;denyall;auth_basic “C1G_ADMIN”;auth_basic_user_file htpasswd;
12、将多级目录下的文件转成一个文件,增强seo效果
/job-123-456-789.html 指向/job/123/456/789.htmlrewrite^/job-([0-9]+)-([0-9]+)-([0-9]+).html$ /job/$1/$2/jobshow_$3.html last;复制代码
13、文件和目录不存在的时候重定向:
if (!-e $request_filename) {proxy_pass http://127.0.0.1;}
14、将根目录下某个文件夹指向2级目录
如/shanghaijob/ 指向 /area/shanghai/如果你将last改成permanent,那么浏览器地址栏显是/location/shanghai/rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;上面例子有个问题是访问/shanghai时将不会匹配rewrite ^/([0-9a-z]+)job$ /area/$1/ last;rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;这样/shanghai 也可以访问了,但页面中的相对链接无法使用,如./list_1.html真实地址是/area/shanghia/list_1.html会变成/list_1.html,导至无法访问 。那我加上自动跳转也是不行咯(-d $request_filename)它有个条件是必需为真实目录,而我的rewrite不是的,所以没有效果if (-d $request_filename){rewrite ^/(.*)([^/])$ http://$host/$1$2/permanent;}知道原因后就好办了,让我手动跳转吧rewrite ^/([0-9a-z]+)job$ /$1job/permanent;rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
15、域名跳转
server{listen80;server_namejump.linuxidc.com;index index.html index.htm index.php;root/opt/lampp/htdocs/www;rewrite ^/ http://www.linuxidc.com/;access_logoff;}
16、多域名转向
server_namewww.linuxidc.comwww.linuxidc.net;index index.html index.htm index.php;root/opt/lampp/htdocs;if ($host ~ "linuxidc.net") {rewrite ^(.*) http://www.linuxidc.com$1permanent;}
六、nginx全局变量arg_PARAMETER#这个变量包含GET请求中,如果有变量PARAMETER时的值 。args#这个变量等于请求行中(GET请求)的参数,如:foo=123&bar=blahblah;binary_remote_addr #二进制的客户地址 。body_bytes_sent#响应时送出的body字节数数量 。即使连接中断,这个数据也是精确的 。content_length#请求头中的Content-length字段 。content_type#请求头中的Content-Type字段 。cookie_COOKIE#cookie COOKIE变量的值document_root#当前请求在root指令中指定的值 。document_uri#与uri相同 。host#请求主机头字段,否则为服务器名称 。hostname#Set to themachine’s hostname as returned by gethostnamehttp_HEADERis_args#如果有args参数,这个变量等于”?”,否则等于”",空值 。http_user_agent#客户端agent信息http_cookie#客户端cookie信息limit_rate#这个变量可以限制连接速率 。query_string#与args相同 。request_body_file#客户端请求主体信息的临时文件名 。request_method#客户端请求的动作,通常为GET或POST 。remote_addr#客户端的IP地址 。remote_port#客户端的端口 。remote_user#已经经过Auth Basic Module验证的用户名 。request_completion #如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty) 。request_method#GET或POSTrequest_filename#当前请求的文件路径,由root或alias指令与URI请求生成 。request_uri#包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz” 。不能修改 。scheme#HTTP方法(如http,https) 。server_protocol#请求使用的协议,通常是HTTP/1.0或HTTP/1.1 。server_addr#服务器地址,在完成一次系统调用后可以确定这个值 。server_name#服务器名称 。server_port#请求到达服务器的端口号 。
七、Apache和Nginx规则的对应关系Apache的RewriteCond对应Nginx的ifApache的RewriteRule对应Nginx的rewriteApache的[R]对应Nginx的redirectApache的[P]对应Nginx的lastApache的[R,L]对应Nginx的redirectApache的[P,L]对应Nginx的lastApache的[PT,L]对应Nginx的last
例如:允许指定的域名访问本站,其他的域名一律转向www.linuxidc.net
Apache:RewriteCond %{HTTP_HOST} !^(.*?).aaa.com$[NC]RewriteCond %{HTTP_HOST} !^localhost$ RewriteCond %{HTTP_HOST}!^192.168.0.(.*?)$RewriteRule ^/(.*)$ http://www.linuxidc.net[R,L]
Nginx过滤示例:
if( $host ~* ^(.*).aaa.com$ ){set $allowHost ‘1’;}if( $host ~* ^localhost ){set $allowHost ‘1’;}if( $host ~* ^192.168.1.(.*?)$ ){set $allowHost ‘1’;}if( $allowHost !~ ‘1’ ){rewrite ^/(.*)$ http://www.linuxidc.netredirect ;}
总结后端开发是一个最接近全栈的一个职业,前端不够用后端顶上写页面JS,没有运维不要紧后端来维护服务器,总之一个好的后端就是能面面俱到 。
作者:程序员内点事
原文链接:https://juejin.im/post/5e78626ae51d45270c27a66f
推荐阅读
- Nginx通关攻略
- IIS、Apache、Tomcat、Nginx、CDN,它们之间有何区别?
- linux下计算网站PV量、UV量
- 常见应用部署 docker:docker部署nginx
- 教你如何一键生成Nginx配置,让配置不在繁琐
- Nginx配置解析整理
- 喜极而泣,我终于学会了Nginx!
- 一分钟搞懂;如何通过nginx将网站访问改为https
- HTTP2.0的技术构架总结 与 Nginx和Tomcat配置HTTP2.0
- Nginx的学习,指令配置详解