Nginx移动端和PC端返回不同页面内容且不影响的URL的处理方法

发布于 2020-07-07

一个项目,前端单独给移动端和pc端写了不同的页面,并且设置了两个文件夹,pc/mobile 但是url需要保持不变,叫前端写个js判断一下,前端回复说,这样影响效率,nginx判断比较快 然后就开始了nginx配置之路 毫无撤退可言 要求:保持URL不变,nginx判断移动端和PC端 返回不同文件夹中的内容 实现在url不变的情况下 PC访问展示PC页面的内容,手机访问展示手机的页面     刚开始想着用if来判断用的用户的代UA    ,alias  指定不同的目录 (注意:这种写法是错误的) location /pay/ { if ( $http_user_agent ~ "(iPhone)|(Android)" ){ alias /www/pay/mobile/; }   然后执行   nginx -t    报错 nginx: [emerg] "alias" directive is not allowed here in /etc/nginx/nginx.conf:35 关于if的各种坑,可以查看 https://xwsoul.com/posts/761?tdsourcetag=s_pctim_aiomsg 感觉写的还不错 然后咨询和讨论得到两种解决方法 通过 rewrite 和 location 做两次处理 通过 if 内嵌变量,然后把用alias+变量的方法间接处理 上代码 方案一 location ~ ^/pay(/.*) { set $way $1; if ( ...


Nginx下让wpsupercache支持"MOD_REWRITE"模式

发布于 2017-07-31

Nginx以它的低系统资源消耗 、轻量级等特点深受喜爱,尤其是目前LNMP架构的服务器随处可见。WP Super Cache到目前仍然是停留在仅对Apache友好的状态……官方人员在09年时推出了使Super Cache在Nginx下可以正常生成静态网页(所谓的mod_rewrite)的方法,只可惜据现在已经有了将近5年的历史……WP酷在一番搜索后得出答案,现在与大家分享。 如果你使用的是军哥的LNMP一键包,那么直接替换/usr/local/nginx/conf/wordpress.conf文件的内容即可。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 location / {           if (-f $request_filename) {               break;           }           set $supercache_file '';           set $supercache_uri ...


全面了解Nginx主要应用场景

发布于 2017-05-14

前言 本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得。所以还请见谅,同时欢迎留言交流 Nginx能做什么 1.反向代理 2.负载均衡 3.HTTP服务器(包含动静分离) 4.正向代理 以上就是我了解到的Nginx在不依赖第三方模块能处理的事情,下面详细说明每种功能怎么做 反向代理 反向代理应该是Nginx做的最多的一件事了,什么是反向代理呢,以下是百度百科的说法:反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代 理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。 下面贴上一段简单的实现反向代理的代码 server { listen 80; server_name localhost; client_max_body_size 1024M; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host:$server_port; } } 保存配置文件后启动Nginx,这样当我们访问localhost的时候,就相当于访问localhost:8080了 负载均衡 负载均衡也是Nginx常用的一个功能,负载均衡其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和 其它关键任务服务器等,从而共同完成工作任务。简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都 需要同时配置反向代理,通过反向代理跳转到负载均衡。而Nginx目前支持自带3种负载均衡策略,还有2种常用的第三方策略。 1、RR(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 简单配置 upstream test { server localhost:8080; server localhost:8081; } server { listen 81; server_name localhost; client_max_body_size 1024M; location / { proxy_pass http://test; proxy_set_header Host $host:$server_port; } ...


Nginx 服务器开启status页面检测服务状态

发布于 2017-04-17

nginx内建了一个状态页,可以了解nginx的状态以及监控nginx。 前提是在编译的时候需要添加以下模块 --with-http_stub_status_module 可以使用 nginx -V 来查看是否安装了改模块 1. 启用nginx status配置 在nginx.conf或者主机配置文件中的server下面添加 1 location /status {       stub_status on;       access_log off;    } 2. 重启nginx 请依照你的环境重启你的nginx 1 # service nginx restart 3. 打开status页面 1 2 3 4 5 # curl http://127.0.0.1/status Active connections: 11921 server accepts handled requests 11989 11989 11991 Reading: 0 Writing: 7 Waiting: 42 或者直接浏览器打开 http://网站域名或IP/status 4. nginx status详解 ...


Nginx下启用wp-super-cache的mod_rewrite缓存模式及其配置规则

发布于 2017-03-23

将以下代码扔到nginx.conf中,然后重启nginx。 location / { # 如果请求的文件已存在,直接返回 if (-f $request_filename) { break; } set $supercache_file ''; set $supercache_uri $request_uri; set $supercache 1; set $ihttp_host ''; if ($request_method = POST) { set $supercache 0; } # 仅在访问文章永久链接时使用静态文件,请求中带参数则不使用静态缓存 set $qs 0; if ($query_string) { set $qs 1; } # 不过从 twitter, facebook, feedburner 链接点过来的,总是带参数,这些访问仍然可以使用静态文件 if ($query_string ~* "^utm_source=([^&]+)&utm_medium([^&]+)&utm_campaign=([^&]+)(&utm_content=([^&]+))?$") { set $qs 0; set $supercache_uri $document_uri; } #deactivate on ...


nginx配置正向代理服务器

发布于 2017-03-21

编辑nginx.conf文件,在  “http {”   和对应的 “}” 中间添加服务 注意 :正向代理服务貌似不能以虚拟机的形式添加在“conf.d”和“sites-enabled”文件夹里,不然不生效 #HTTP server{ resolver 114.114.114.114; access_log /var/log/nginx/access_proxy.log main; listen 80; location / { root html; index index.html index.htm; proxy_pass $scheme://$host$request_uri; proxy_set_header HOST $http_host; proxy_buffers 256 4k; proxy_max_temp_file_size 0k; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_next_upstream error timeout invalid_header http_502; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } Linux学习,http:// linux.it.net.cn  


Nginx 防止被域名恶意解析

发布于 2017-03-11

这个还是比较重要的设置  ,之前一直被莫名的cc攻击 一直不断 虽然做了各种措施来抵御 但没有彻底解决 设置以后 各种乱七八糟的 的访问会被禁止 ,只有通过设置里面的域名才能访问 打开Nginx配置文件nginx.conf,把原来的server改成如下状态: server { listen 80 default_server; server_name _; access_log off; return 444; }


树莓派 NGINX 流控和 fail2ban 防止 CC 攻击

发布于 2017-02-15

博客一直定时会遭受小量的cc攻击 总是导致我的树莓派会很卡 CC 攻击 攻击者通过创建大量请求导致服务器资源耗尽,主要针对特定服务接口,属于实现 DoS 攻击的一种方式(DoS 攻击更多是针对网络端口,而不是具体服务接口)。 NGINX 流控 limit_req_zone:通过“漏桶”算法限制每个 IP 发起的请求频率。 limit_conn_zone:限制每个 IP 发起的连接数。 fail2ban 通过匹配服务器日志操作 iptables 来限制客户端网络连接。 实践配置 NGINX 部分 在 http 部分中配置: limit_req_zone $binary_remote_addr zone=sym:10m rate=5r/s; limit_conn_zone $binary_remote_addr zone=conn_sym:10m; 然后在需要流控的 location 部分配置: limit_req zone=sym burst=5; limit_conn conn_sym 10; 重启 NGINX 后当有超流客户端请求时将在 NGINX error.log(默认在 /var/log/nginx/error.log) 中看到类似记录: 2017/02/12 18:03:57 [error]15965#15965: *61240 limiting requests, excess: 6.000 by zone "sym", client: 121.41.106.121, server: hacpai.com, request: ...


Nginx 开启HTTP2

发布于 2016-11-30

nginx 开启http2 需要1.9.5以上并且开启ssl https 看看是自己的nginx版本是否在1.9.5及以上 如何升级 看本博客上一篇文章 https如何开启可以看前面几篇文章   打开nginx配置文件或虚拟机配置文件 在端口后面加 http2 即可 server { listen 443 ssl http2;


树莓派升级Nginx到 1.10.2

发布于 2016-11-30

前言:看到一篇关于HTTP2的文章,说性能是http1.1的几倍 于是就有了部首的冲动,但是nginx 开启http2 需要1.9x以上 我现在是1.6.3 所以就有了这篇文章(当你看到这篇文章的时候已经是http2协议了) 我的环境: Raspberrypi Nginx 1.6.3 Nginx是通过apt-get的方式安装的,所以我的路径与下载代码再编译、安装的有些不一样,我的升级过程如下 1.进入tmp文件夹 cd /tmp 2.下载nginx-1.10.2.tar.gz文件到tmp文件夹中 wget http://nginx.org/download/nginx-1.10.2.tar.gz 3.解压nginx-1.10.2.tar.gz文件 tar zxvf nginx-1.10.2.tar.gz 4.进入ngixn-1.10.2文件夹中 cd nginx-1.10.2 5.查看nginx原来的配置 nginx -V 上面的命令将输出: --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_sub_module --with-http_xslt_module --with-mail --with-mail_ssl_module --with-http_v2_module 6.执行configure命令,后面跟上原来nginx的配置 ./configure --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi ...