当前位置: 首页 > 后端技术 > PHP

【nginx】nginx配置有什么讲究

时间:2023-03-29 22:42:39 PHP

nginx是一个高负载能力的web服务器,也是LNMP架构的主要角色之一。现在越来越多的开发者选择nginx作为php替代apache的好搭档。下面以Mac系统为例,介绍一下nginx的基本配置。打开nginx.conf,找到http下的server。前几行的内容是:listen8080;#监听端口server_namelocalhost;#本地域名root/usr/local/var/www;#项目根目录nginx默认监听8080端口,可以改成80端口。默认的项目根也可以改。不过改完之后必须重新加载配置文件才能生效:sudonginx-sreload注意:如果你不喜欢localhost,想要个性化的本地域名,比如www.test.com,先编辑hosts文件:sudovim/etc/hosts中添加一个:127.0.0.1www.test.com然后修改nginx.conf:server_namewww.test.com总之nginx.conf中设置的域名必须在hosts中存在文件!隐藏入口文件我们在开发项目的时候,一般都需要隐藏入口文件。依旧是http下的服务器,我们找到location/,在大括号里面进行修改。记住ci框架和tp框架的写法略有不同,如下:location/{indexindex.phpindex.htmlindex.htm;if(!-e$request_filename){重写^/(.*)$/index.php?$1最后;#ci框架写法#rewrite^/(.*)$/index.php?s=/$1last;#tp框架写法break;}}如果使用tp5,入口文件在public目录下,但是不想在访问入口文件的URL中写localhost/public/,想直接通过localhost/访问,可以这样写this:最后重写^/(.*)$/public/index.php?s=/$1;其实隐藏入口文件就意味着nginx做了路由,其规律性不难理解。解析php想要nginx正常解析php,必须先在安装好php后启动php-fpm。启动方式:sudophp-fpm-D上一步完成后,下一步就是修改nginx.conf。找到server下的那行location~\.php$,包括后面{}里的内容,去掉注释,也就是去掉前面的#号,修改成这样:location~\.php(\/.*)*${fastcgi_pass127.0.0.1:9000;fastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;fastcgi_split_path_info^((?U).+\.php)(/?.+)$;fastcgi_paramPATH_INFO$fastcgi_path_info;fastcgi_paramPATH_TRANSLATED$document_root$fastcgi_path_info;includefastcgi_params;}如图:重新加载配置文件。此时nginx可以配合php-fpm正确解析PHP。在多站点设置中,我们之前修改了配置文件的代码位置,都是在http下的server中。实际上,一台服务器就相当于一个站点。nginx.conf下的http模块默认开启一个服务器,即只有一个站点。如果我们想要多个站点,我们需要添加多个服务器。现在我们要添加一个站点,假设这个站点的域名是www.test2.com,但是服务器没有写在nginx.conf中。nginx为我们提供了一个存放多站点配置文件的目录,我们切换到这个目录:cd/usr/local/etc/nginx/servers/然后新建一个配置文件:vimwww.test2.com.conf里面写入服务器:服务器{听80;服务器名称www.test2.com;indexindex.htmlindex.php;根/usr/local/var/test2;location/{indexindex.phpindex.html;重写^/(.*)$/public/index.php?s=/$1最后;休息;}location~\.php${fastcgi_pass127.0.0.1:9000;fastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;fastcgi_split_path_info^((?U).+\.php)(/?.+)$;fastcgi_paramPATH_INFO$fastcgi_path_info;fastcgi_paramPATH_TRANSLATED$document_root$fastcgi_path_info;包括fastcgi_params;}}保存退出,重新加载配置文件。最后在hosts中添加:127.0.0.1www.test2.com此时www.test2.com就可以访问到你新建的工程目录/usr/local/var/test2了!反向代理设置我的应用场景是这样的。假设我的服务器上存放了一个node项目,node占用80端口,可以正常运行。但是我想再放一个php项目。这个时候这个php项目不能80端口。如果80端口同时适用于node项目和php项目,需要使用nginx作为反向代理设置。解决方法是将node项目设置为非80端口,比如3000,在nginx中添加一个站点,假设是www.test3.com,访问80端口,代理到3000端口。设置方法如下上一节添加一个新站点:cd/usr/local/etc/nginx/servers/然后新建一个配置文件:vimwww.test3.com.conf写一个服务器:server{listen80;服务器名称www.test3.com;位置/{proxy_passhttp://127.0.0.1:3000;}}访问www.test3.com,即可访问node项目!本文由杨成功原创。更多原创内容,请前往杨成功的全栈之路专栏