Tag: nginx

  • 2024年如何安装Linux, Nginx, MySQL, PHP (LEMP stack) wordpress on Ubuntu22.04

    2024年如何安装Linux, Nginx, MySQL, PHP (LEMP stack) wordpress on Ubuntu22.04

    新装的ubuntu22.04 (在interserver购买的vps) ,下面步骤直接操作: apt updateapt install nginx 查看防火墙的可配置文件的选项,便于后面的规则添加: 和防火墙的现在的运行状态: inactive表示防火墙并没有启用,把它开启,先开启ssh,别把自己关到外面,再配置web服务器,还没有签证书,只开80端口就可以: 这样,防火墙开启了,并且有了2条规则,80和22 查看自己的ip:curl -4 icanhazip.com ,此时可以通过ip访问nginx 下面安装mysql: apt -y install mysql-server 运行 mysql_secure_installation 安全配置,安全最重要!!! 直接就可以进入mysql: 下面安装php: apt -y install php8.1-fpm php-mysql 先看看nginx的启动用户是哪个: 下面配置nginx的php解析,就使用用户www-data mkdir -p /var/www/us.moneyslow.comchown -R www-data:www-data /var/www/us.moneyslow.com 我们只用/etc/nginx/conf.d下的配置文件,其他地方的都删掉: # rm -rf /etc/nginx/sites-enabled/# rm -rf /etc/nginx/sites-available/ vi /etc/nginx/conf.d/us.moneyslow.conf 测试配置文件,并重启nginx: 在/var/www/us.moneyslow.com目录下创建一个php的测试文件:index.php 可以访问到php页面: 这样基本就ok了,更详细的测试数据库的文档可以参考: https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu 如果进一步安装wordpress,可以参考: https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-lemp-on-ubuntu-22-04

  • 批量修改nginx配置文件

    批量修改nginx配置文件

    nginx批量生成修改配置文件

  • nginx配置各种代理场景语法

    nginx配置各种代理场景语法

    备忘:nginx代理配置语法

  • nginx安全配置add_header最佳实践(securityheaders测试A+)
  • 如何隐藏去掉nginx的版本号信息

    如何隐藏去掉nginx的版本号信息

    本文讨论nginx安全性,去掉版本号信息

  • 通过IPv4访问nginx服务,代理后端的IPv6服务

    通过IPv4访问nginx服务,代理后端的IPv6服务

    本文讨论ipv4代理ipv6的nginx配置

  • Nginx简明教程

    Nginx简明教程

    什么是 NGINX NGINX是一个免费的、开源的、高性能的 HTTP 服务器和反向代理,以及一个 IMAP/POP3 代理服务器。 NGINX以其高性能、稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。 NGINX 是为解决C10K 问题而编写的少数服务器之一。与传统服务器不同,NGINX 不依赖于线程来处理请求。相反,它使用更加可扩展的事件驱动(异步)架构。这种架构在负载下使用小的但更重要的是可预测的内存量。即使您不希望处理数千个并发请求,您仍然可以从 NGINX 的高性能和小内存中获益。 NGINX 在各个方向扩展:从最小的 VPS 一直到大型服务器集群。 控制语句 NGINX 启动后,有一个主进程(master process)和一个或多个工作进程(worker process),主进程的作用主要是读入和检查NGINX的配置信息,以及维护工作进程;工作进程才是真正处理客户端请求的进程。具体要启动多少个工作进程,可以在 NGINX 的配置文件nginx.conf中通过worker_processes指令指定。 可以通过以下这些命令来控制 NGINX: nginx -s [ stop | quit | reopen | reload ] 其中: nginx -s stop: 强制停止NGINX,不管工作进程当前是否正在处理用户请求,都会立即退出。nginx -s quit:“优雅地”退出NGINX,执行这个命令后,工作进程会将当前正在处理的请求处理完毕后,再退出。nginx -s reload:重载配置信息。当NGINX的配置文件改变之后,同过执行这个命令,使更改的配置信息生效,而无需重新启动nginx.nginx -s reopen:重新打开日志文件。 配置服务器名称:服务器名称是用server_name指令来定义的,并且它决定了哪一个server块将用来处理给定的请求。可以使用精确名称、通配符、正则表达式来定义服务器名称。 当寻找一个虚拟服务器的名字,如果指定的名称匹配多个变体,例如,通配符和正则表达式都匹配,将会按照以下的顺序选择第一个匹配的变体: 精确名称 以星号()开头的最长的通配符,例如“.example.org” 以星号()结尾的最长的通配符,例如“mail.” 第一个匹配的正则表达式(根据在配置文件中出现的顺序) 配置…

  • nginx安全配置文件最佳实践

    nginx安全配置文件最佳实践

    Nginx是一个很牛逼的web server 服务器。与传统服务器不同,Nginx 不依赖线程来处理请求。 相反,它使用更具可扩展性的事件驱动(异步)架构。 Nginx 为多个高流量网站提供支持,例如 WordPress、Hulu、Github 和 SourceForge。 一、打开SELinux(设置正确的 SE Linux 布尔值加强安全),这个最安全,最变态,以至于可能会对你的开发调试带来麻烦,适用于不怕麻烦的高级运维安全人员。使用下面的命令: 请查看设置为“on”的设置,如果它们不适用于你的设置,请借助setsebool命令将其更改为“off”。 二、挂载磁盘的目录权限最小化(noexec, nodev , nosetuid) 挂载的目录文件在/etc/fstab这个里面配置,要设置成这样: 三、加强/etc/sysctl.conf内核参数的安全控制,以下是一个标准安全的例子,你可以直接用: 四、去掉不需要的nginx 模块,比如,去掉ssi这个模块: 五、安装编译nginx的时候,去掉nginx的版本信息 编辑 src/http/ngx_http_header_filter_module.c 找到下面两行: 替换为: 然后继续编译安装就可以了。另外,可以在nginx配置文件中加入 server_tokens off 比如下面的例子: 六、在操作系统上安装mod_security来加强安全yum install mod_security,这个以后慢慢展开讲解。 七、安装自带selinux功能的nginx 八、利用iptables防火墙,下面是一个例子: 规则(进来的80,可以ping,出去只允许123和25)Incoming HTTP (TCP port 80) requestsIncoming ICMP ping requestsOutgoing ntp (port 123) requestsOutgoing smtp (TCP port 25) requests…

  • Nginx头信息中x-powered-by如何去掉隐藏PHP版本 version 8/7/5
  • Ubuntu22.04编译安装nginx时报错error: ‘ENGINE_free’ is deprecated: Since OpenSSL 3.0
  • nginx代理proxy_pass增加第三方插件subs_filter后进行的配置文件例子

    nginx代理proxy_pass增加第三方插件subs_filter后进行的配置文件例子

    以下配置文件例子,可以解决大多数代理的问题:

  • centos7下编译安装nginx时configure报错需要安装的包

    centos7下编译安装nginx时configure报错需要安装的包

    一般下载tar.gz后,需要安装很多个包,总之一言难尽,才会configure顺利: 接下来configure,然后make和make install 就可以了。

  • 报错解决办法 nginx: [warn] could not build optimal server_names_hash, you should increase either server_names_hash_max_size: 512 or server_names_hash_bucket_size: 64; ignoring server_names_hash_bucket_size
  • nginx基础教程(配置文件结构介绍及简单例子)

    nginx基础教程(配置文件结构介绍及简单例子)

    nginx基础教程。 nginx还可以作为Fastcgi的代理,nginx 可用于将请求路由到 FastCGI 服务器,这些服务器运行使用各种框架和编程语言(如 PHP)构建的应用程序

  • 理解nginx的proxy_pass用法和url的路径翻译《nginx的proxy_pass代理路径翻译对照表》

    理解nginx的proxy_pass用法和url的路径翻译《nginx的proxy_pass代理路径翻译对照表》

    其结果则不同,仓促配置的情况下,一个“/”号的位置效果令人抓狂。 由此总结出以下的《nginx的proxy_pass代理路径翻译对照表》:

  • nginx默认域名或者ip地址跳转几个技巧
  • 正向代理和反向代理区别图例

    正向代理和反向代理区别图例

    正向代理代理的是客户端发送请求,客户端和代理服务器处于同一个网络环境,隐藏了客户端信息 正向代理主要作用是访问不可访问的资源和统一管控客户端请求 反向代理代理的是服务器接收请求,服务器和代理服务器处于同一个网络环境,隐藏了服务器信息 反向代理主要作用是保护内网服务器和负载路由转发

  • 网站域名不带www的自动跳转到www
  • ubuntu下nginx最新1.21版本安装第三方插件sub_filter

    ubuntu下nginx最新1.21版本安装第三方插件sub_filter

    nginx的反向代理第三方插件安装方法

  • OpenSSL来配置nginx的页面访问密码

    OpenSSL来配置nginx的页面访问密码

    推荐用htpasswd这个命令: 用openssl的命令夜可以,但是笔者遇到不生效的情况,就是随便输入密码也会能访问到,不知道为什么 按提示输入密码 cat /etc/nginx/.htpasswdOutputmoney:$apr1$wI1/T0nB$jEKuTJHkTOOWkopnXqC1d1 在nginx配置文件里加auth_basic 的两行:

  • 使用NGINX的limit_req_zone和limit_req针对IP进行速率限制防止DDos

    使用NGINX的limit_req_zone和limit_req针对IP进行速率限制防止DDos

    我们已经介绍了 NGINX 和 NGINX Plus 提供的许多限速功能,包括为 HTTP 请求的不同位置设置请求速率,以及配置其他功能来限速,例如burst和nodelay参数。我们还介绍了对列入许可名单和拒绝名单的客户端 IP 地址应用不同限制的高级配置,并解释了如何记录被拒绝和延迟的请求。

  • wordpress上传文件超过了站点的最大上传限制--迅速解决!

    wordpress上传文件超过了站点的最大上传限制–迅速解决!

    改php和nginx 的配置文件: php相关就是 php.ini file_uploads = on ; upload_max_filesize = 20M; post_max_size = 20; post上限,一般来说,post_max_size设置要比upload_max_filesize稍大一些 还需要根据实际情况调整下面的选项 max_execution_time = 180; 脚本最大执行时间(秒),过短会导致文件还没上传完脚本就停止了 max_input_time = 180; 请求最大传输时间,过短会导致文件还没上传完传输就停止了 memory_limit = 128M; 内存上限 nginx相关就是nginx.conf nginx 如果上传文件时超过了nginx限制,就会返回一个“413 Request Entity Too Large”的错误 在http{}中添加一个client_max_body_size 20m;配置项;

  • ngx-fancyindex 代替 autoindex 实现索引目录美化,而且可以加长显示文件名长度。
  • CentOS6.x/7.x版本下yum安装nginx+php7+mysql5.5环境

    CentOS6.x/7.x版本下yum安装nginx+php7+mysql5.5环境

    需要公网访问权限,可以访问到 nginx.org rpms.famillecollet.com remi的源

  • nginx配置https证书错误NSS error -5938 (PR_END_OF_FILE_ERROR)

    nginx配置https证书错误NSS error -5938 (PR_END_OF_FILE_ERROR)

    通过curl来检查: curl http://www.moneyslow.com -vv 会出现NSS error -5938 (PR_END_OF_FILE_ERROR)的错误。 从网络搜索答案,无非是防火墙443端口,update nss 之类的方法,不解决问题。 细细想了一下,最近http2也出过问题

  • 400 bad request The plain HTTP request was sent to HTTPS port解决办法

    400 bad request The plain HTTP request was sent to HTTPS port解决办法

    现象:https可以访问,但是http报400 bad request错误。 看报错: 本以为是个牛逼的配置,没想到报错了。 先查400状态码的解释,HTTP/1.1对400 Bad Request的定义: 1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。 2、请求参数有误。 这就很好理解了,我们又没有参数,肯定是第一个原因,我们试图通过HTTP访问网站,这个请求被重定向到HTTPS。 if ($ssl_protocol = “”) { rewrite ^ https://$server_name$request_uri? permanent; } Nginx的配置里是有“ssl on”这一条的,所以肯定使用SSL交互,但是你的request都是HTTP请求,所以就是bad request,于是就是80的请求无法被服务器的443理解。 so,把nginx里的ssl on注释掉,问题解决。 2019年11月2日更新: 最新情况发现,按照以上的解决办法简单注释ssl on,并没有效果,如果用chrome浏览器打开隐私窗口,访问https页面,依据报400错误。用curl来验证: $ curl -I http://moneyslow.com HTTP/1.1 400 Bad Request Server: nginx/1.14.0 (Ubuntu) Date: Sat, 02 Nov 2019 03:09:46 GMT Content-Type: text/html Content-Length: 280 Connection: close header返回400错误依旧。 实际上,解决方法非常简单。在“listen”字符串下的服务器部分,我只需要添加:…

  • nginx 301 rewrite 跳转到www域名的方法

    nginx 301 rewrite 跳转到www域名的方法

    转自 刘荣星的博客,转载时请注明出处及相应链接。https://www.liurongxing.com/nginx-301-www-rewrite.html 首先一、得在你的域名管理里面定义 moneyslow.com和www.moneyslow.com指向你的主机ip地址,我们可以使用nslookup命令测试: 直接输入 nslookup moneyslow.com和nslookup www.moneyslow.com 都有指向ip的A记录即可。 第二、我们才能在nginx里面配置rewrite规则。 打开 nginx.conf文件找到你的server配置段: server { listen 80; server_name www.moneyslow.com moneyslow.com; if ($host != ‘www.moneyslow.com’ ) { rewrite ^/(.*)$ http://www.moneyslow.com/$1 permanent; } …….. 这样就是用户直接访问moneyslow.com直接跳转的www.moneyslow.com。 即让不带www的域名跳转到带www的域名。 办法2:在配置文件里面写两个server,第一个里面把不带www的域名去掉 server { listen 80; server_name www.moneyslow.com; 在配置文件的最下面添加上,这样就可以了。 server { server_name moneyslow.com; rewrite ^(.*) http://www.moneyslow.com/$1 permanent; } 如果有多个不同的域名都绑定在同一个目录下不带3W的301到带3W的方法和上面的一样 在vhost的完整配制里后面加上 server { server_name…

  • nginx禁止ssl2和ssl3

    nginx禁止ssl2和ssl3

    Why disable SSL v2 en SSL v3?为啥要禁用ssl v2 ssl v3 SSL 2.0 and SSL 3.0 are obsolete versions of the SSL protocol that have long since been superseded by the more secure Transport Layer Security (TLS) protocol, dat betere beveiliging biedt. In addition, a SSL 3.0 security flaw nicknamed POODLE was discovered in 2014, allowing…

  • nginx强制http自动跳转到https访问

    nginx强制http自动跳转到https访问

    需求简介 基于nginx搭建了一个https访问的虚拟主机,监听的域名是moneyslow.com,但是很多用户不清楚https和http的区别,会很容易敲成http://moneyslow.com,这时会报出404错误,所以我需要做基于moneyslow.com域名的http向https的强制跳转 我总结了三种方式,跟大家共享一下 nginx的rewrite方法 思路 这应该是大家最容易想到的方法,将所有的http请求通过rewrite重写到https上即可 配置 server { listen 192.168.1.111:80; server_name moneyslow.com; rewrite ^(.*)$ https://$host$1 permanent; } 搭建此虚拟主机完成后,就可以将http://moneyslow.com的请求全部重写到https://moneyslow.com上了 nginx的497状态码 error code 497 497 – normal request was sent to HTTPS 解释:当此虚拟站点只允许https访问时,当用http访问时nginx会报出497错误码 思路 利用error_page命令将497状态码的链接重定向到https://moneyslow.com这个域名上 配置 server { listen 192.168.1.11:443; #ssl端口 listen 192.168.1.11:80; #用户习惯用http访问,加上80,后面通过497状态码让它自动跳到443端口 server_name moneyslow.com; #为一个server{……}开启ssl支持 ssl on; #指定PEM格式的证书文件 ssl_certificate /etc/nginx/test.pem; #指定PEM格式的私钥文件 ssl_certificate_key /etc/nginx/test.key; #让http请求重定向到https请求…

  • Nginx的CGI、FastCGI和PATHINFO

    Nginx的CGI、FastCGI和PATHINFO

    CGI 通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口。通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端。 nginx把活代理给php-fpm,处理完交给nginx,返回给客户。 Nginx接收到php-fpm处理的结果后,就可以响应客户端的http请求给予一个回应了,客户端的这一次http请求就结束了,一张由php产生的华丽丽的网页就呈现在网民的面前。在这段对话中,nginx与php-fpm并没有相互推诿扯皮,交流的很顺畅;没有推诿扯皮的原因就是nginx与php-fpm之间的数据和消息传递使用了统一的标准格式,这个标准格式就是CGI,所以倘若nginx和php-fpm中有任何一方不按CGI标准来玩,你推诿扯皮也没用。 发展到现在,对CGI的理解可以是一种标准接口(协议规范),也可以理解成处理动态网页的某种语言,比如:php、asp都可以宽泛的看做是一种cgi,这个时候cgi就被泛化了但依然包含了不推诿扯皮的交流标准的这一层含义。 FastCGI FastCGI的Fast已经表明含义了,是一种快速的CGI,也是现代动态网页语言与web server之间普遍所采用的。FastCGI像是一个常驻型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算,即FastCGI程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。 nginx与php-fpm就是采用的FastCGI模式。 PATHINFO 常常会见到这种格式的Urlhttps://blog.jjonline.cn/index.php/Article/Post/index.html ,这种Url理解有两种方式: index.php当做一个目录看待:访问blog.jjonline.cn服务器根目录下的index.php目录下的Article目录下的Post目录下的index.html静态html文本文件; index.php当做一个PHP脚本看待:访问blog.jjonline.cn服务器根目录下的index.php脚本,由该脚本产生html页面,Url中/Article/Post/index.html这一部分作为index.php脚本中使用的某种类型的参数。 绝大部分情况下,这种格式的Url理解方式是第二种,而/Article/Post/index.html这一部分理解成PATHINFO就好了。其实PATHINFO是一个CGI 1.1的一个标准,经常用来做为传参载体,只不过咱们没必要深入。 由于Apache的默认配置文件开启了PATHINFO的支持,Apache+PHP的环境下PATHINFO格式的Url可以不出任何错误的执行正确路径的PHP脚本并在脚本中使用PATHINFO中的参数。而Nginx默认提供的有关执行php-fpm运行PHP脚本的默认配置文件中并没有启用PATHINFO,从而导致了一个长久以来的误解:nginx不支持pathinfo。 早期版本的nginx确实不能直接支持pathinfo,但有变相的解决方法,网络上的一些配置nginx支持pathinfo的文章大多就是这种变相解决方法。nginx其实早已可以很简单的通过fastcgi_split_path_info指令支持pathinfo模式了,严格来说是nginx的0.7.31以上版本就可以使用这个指令了。 Nginx的PATHINFO配置 1、关于nginx配置指令的一些墨迹内容 默认的nginx是对http请求的uri进行正则匹配来决定这个请求是否要交给php-fpm来执行;nginx中有关是否要交给php-fpm这个cgi来解析执行某个php脚本的默认配置(nginx1.8.0)如下: location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; } 上述location ~ \.php$这段是一个正则匹配,被匹配的内容是http请求的uri,正则表达式就是\.php$,而~则是nginx的location指令中的一个标记符,表示这个location匹配uri采用正则表达式来匹配;在这里URI和URL还是有区别,请厘清。正则表达式中$表示必须以某个字符或字符串结尾,这样上述默认配置中仅能匹配到以.php为结尾的uri交给php-fpm去解析,如下: 1、https://blog.jjonline.cn/index.php 匹配 2、https://blog.jjonline.cn/admin/index.php?m=Index&a=index 匹配,注意这里Url中有Get变量,nginx中location匹配的路径是uri,也就是虚拟路径部分,本例也就是:/admin/index.php 3、https://blog.jjonline.cn/admin/index.php/Index/index 不匹配,pathinfo模式,nginx将index.php理解成一个目录了,这种情况下的uri为:/admin/index.php/Index/index ,结尾并没有.php这种条件 正确配置Nginx对php的pathinfo支持,先要理解清楚nginx配置文件中是如何将某个请求交给php-fpm来执行的,以上述配置段为例来分析一下: root:这个指令配置了php脚本的根目录,可以使用相对路径也可以使用绝对路径,上述示例中是html,表示php的根目录在nginx安装目录下的html目录;这里的目录一般与nginx配置文件server段下的root目录一致,也就是web服务器的根目录;且大多数的时候建议使用绝对地址。假设这里的root设置为:/var/www/www.jjonline.cn/wwwRoot,这样网站根目录的绝对地址就是/var/www/www.jjonline.cn/wwwRoot,配合各种ftp服务器端配置,将ftp登录的家目录设定为/var/www/www.jjonline.cn。拿ThinkPHP来举例:框架和核心模块文件可以放置在/var/www/www.jjonline.cn目录下,而入口文件放置在/var/www/www.jjonline.cn/wwwRoot下;这样框架和核心模块文件就不会被Url直接访问到。 fastcgi_pass:这个指令配置了fastcgi监听的端口,可以是TCP也可以是unix socket,这里一般推荐走TCP,这个TCP是由php-fpm配置文件决定的,不再详细介绍。 fastcgi_index:这个指令配置了fastcgi的默认索引文件,与server端下index指令类似。…

  • Nginx的SSL模块配置和https配置

    Nginx的SSL模块配置和https配置

      Nginx如果未开启SSL模块,配置Https时提示错误nginx: [emerg] the “ssl” parameter requires ngx_http_ssl_module in /usr/local/nginx/conf原因也很简单,nginx缺少http_ssl_module模块,编译安装的时候带上–with-http_ssl_module配置就行了,但是现在的情况是我的nginx已经安装过了,怎么添加模块,其实也很简单,往下看: 做个说明:我的nginx的安装目录是/usr/local/nginx这个目录,我的源码包在/usr/local/src/nginx-1.6.2目录nginx: [emerg] the “ssl” parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:37Nginx开启SSL模块切换到源码包:cd /usr/local/src/nginx-1.11.3查看nginx原有的模块/usr/local/nginx/sbin/nginx -V在configure arguments:后面显示的原有的configure参数如下:–prefix=/usr/local/nginx –with-http_stub_status_module那么我们的新配置信息就应该这样写:./configure –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module运行上面的命令即可,等配置完成后,运行命令make这里不要进行make install,否则就是覆盖安装然后备份原有已安装好的nginxcp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak然后将刚刚编译好的nginx覆盖掉原有的nginx(这个时候nginx要停止状态)cp ./objs/nginx /usr/local/nginx/sbin/然后启动nginx,仍可以通过命令查看是否已经加入成功/usr/local/nginx/sbin/nginx -VNginx 配置Http和Https共存 server {            listen 80 default backlog=2048;            listen 443 ssl;       …

  • discuz nginx 的静态化配置

    discuz nginx 的静态化配置

    rewrite ^([^\.]*)/topic-(.+)\.html$ $1/portal.php?mod=topic&topic=$2 last; rewrite ^([^\.]*)/article-([0-9]+)-([0-9]+)\.html$ $1/portal.php?mod=view&aid=$2&page=$3 last; rewrite ^([^\.]*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3 last; rewrite ^([^\.]*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=viewthread&tid=$2&extra=page%3D$4&page=$3 last; rewrite ^([^\.]*)/group-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=group&fid=$2&page=$3 last; rewrite ^([^\.]*)/space-(username|uid)-(.+)\.html$ $1/home.php?mod=space&$2=$3 last; rewrite ^([^\.]*)/blog-([0-9]+)-([0-9]+)\.html$ $1/home.php?mod=space&uid=$2&do=blog&id=$3 last; rewrite ^([^\.]*)/(fid|tid)-([0-9]+)\.html$ $1/index.php?action=$2&value=$3 last; rewrite ^([^\.]*)/([a-z]+[a-z0-9_]*)-([a-z0-9_\-]+)\.html$ $1/plugin.php?id=$2:$3 last; if (!-e $request_filename) { return 404; }

  • nginx 1.13 see security.limit_extensions 错误解决办法

    nginx 1.13 see security.limit_extensions 错误解决办法

    server{         listen       80;         server_name  moneyslow.com;         access_log  /data/logs/nginx/moneyslow_access.log main;         error_log  /data/logs/nginx/moneyslow_error.log;         index index.php index.html;         root  /var/www/html;         if ($request_uri ~ ” “) {        …

  • nginx标准日志格式

    nginx标准日志格式

    Nginx 日志相关配置有 2 个地方:access_log 和 log_format 。 默认的格式: access_log /data/logs/nginx-access.log; log_format old ‘$remote_addr [$time_local] $status $request_time $body_bytes_sent ‘ ‘”$request” “$http_referer” “$http_user_agent”‘; 相信大部分用过 Nginx 的人对默认 Nginx 日志格式配置都很熟悉,对日志的内容也很熟悉。但是默认配置和格式虽然可读,但是难以计算。 Nginx 日志刷盘相关策略可配置: 比如,设置 buffer,buffer 满 32k 才刷盘;假如 buffer 不满 5s 钟强制刷盘的配置如下: access_log /data/logs/nginx-access.log buffer=32k flush=5s; 这决定了是否实时看到日志以及日志对磁盘 IO 的影响。 Nginx 日志能够记录的变量还有很多没出现在默认配置中: 比如: 请求数据大小:$request_length 返回数据大小:$bytes_sent 请求耗时:$request_time 所用连接序号:$connection 当前连接发生请求数:$connection_requests Nginx 的默认格式不可计算,需要想办法转换成可计算格式,比如用控制字符 ^A…

  • 基于nginx-php-fpm的docker安装php7的redis扩展memcahced扩展

    基于nginx-php-fpm的docker安装php7的redis扩展memcahced扩展

    镜像:https://hub.docker.com/r/richarvey/nginx-php-fpm/ php版本:FROM php:7.1.11-fpm-alpine 下载镜像并启动容器: docker run -d richarvey/nginx-php-fpm 进入容器: docker exec -it 08f7c84d5b84 bash     1  php -m|grep redis     2  mkdir -p /usr/src/php/ext/redis     3  curl -L https://github.com/phpredis/phpredis/archive/3.0.0.tar.gz | tar xvz -C /usr/src/php/ext/redis –strip 1     4  echo ‘redis’ >> /usr/src/php-available-exts     5  docker-php-ext-install redis     6  php -m|grep…

  •  替代tcpcopy的nginx模块 Module ngx_http_mirror_module

     替代tcpcopy的nginx模块 Module ngx_http_mirror_module

    官方:http://nginx.org/en/docs/http/ngx_http_mirror_module.html 例子: Example Configuration location / { mirror /mirror; proxy_pass http://backend; } location /mirror { internal; proxy_pass http://test_backend$request_uri; }

  • Docker–使用 Dockerfile 定制nginx镜像

    # docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx v2 3e3413f5d526 3 hours ago 109MB ubuntu 14.04 2ff3b426bbaa 3 days ago 188MB nginx latest 3448f27c273f 8 days ago 109MB # cat Dockerfile FROM nginx RUN echo ‘<h1>Hello, Docker!1111111111</h1>’ > /usr/share/nginx/html/index.html # docker build -t nginx:v3 . Sending build context to Docker daemon 2.048kB Step…

  • 使用Nginx反向代理网站

    使用Nginx反向代理网站

    server { listen 80; root /home/wwwroot/default; location / { proxy_pass http://downloads.moneyslow.com/; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /f/ { proxy_pass http://www.sourceforge.net/; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log /home/wwwlogs/access.log; }

  • Linux 下使用 rinetd 来实现端口转发

    Linux 下使用 rinetd 来实现端口转发

    端口转发很好用的技巧。

  • nginx 目录禁止ip 重定向域名不发生变化

    nginx 目录禁止ip location /zgadmin { allow 220.220.22.92; deny all; } nginx 实现A域名重写到B域名而不引起浏览器中url的变化? rewrite与proxy_pass搭配使用: location ~ ^/frompath/ { rewrite ^/frompath/(.*)$ /topath/$1 break; proxy_pass http://www.domainB.com; } 既可以实现http://www.a.com/frompath/page.php 被重写到 http://www.b.com/topath/page.php 而不引起浏览器地址栏中url的变化。