资讯专栏INFORMATION COLUMN

【nginx】nginx 配置那些事儿

PrototypeZ / 3192人阅读

摘要:是一款具有高负载能力的服务器,也是架构的主要角色之一。多站点设置前面我们修改配置文件的代码位置,都是在下的里。如果想项目和项目均适用端口,则需要利用做反向代理设置。

nginx 是一款具有高负载能力的 web 服务器,也是 LNMP 架构的主要角色之一。现在越来越多的开发者选择 nginx 作为 php 的好搭档,替代 apache 的位置。下面我以 Mac 系统为例,介绍下 nginx 的配置

基本配置

打开 nginx.conf,找到 http 下的 server,前几行的内容分别是:

listen  8080;                #监听端口
server_name  localhost;      #本地域名
root  /usr/local/var/www;    #项目根目录

nginx 默认监听8080端口,你可以改成 80 端口。默认项目根目录也可以更改。不过更改之后要重新载入配置文件才能生效:

sudo nginx -s reload

注意:如果你不喜欢localhost,你想要一个个性的本地域名,比如www.test.com,首先要编辑 hosts 文件:

sudo vim /etc/hosts

添加一条:

127.0.0.1     www.test.com

然后修改 nginx.conf:

server_name    www.test.com

总之 nginx.conf 中设置的域名,必须在 hosts 文件中存在!


隐藏入口文件

在我们开发项目的时候,一般会有隐藏入口文件的需求。依然是在 http 下的 server,我们找到location /,在大括号内做修改。切记ci框架和tp框架的写法稍有不同,具体如下:

location / {
       index  index.php index.html index.htm;
       if (!-e $request_filename) {
            rewrite ^/(.*)$ /index.php?$1 last;    #ci框架写法
            #rewrite ^/(.*)$ /index.php?s=/$1 last;    #tp框架写法
            break;
       }
}

如果你用的是tp5, 入口文件在 public 目录下,但是你不想在URL中写localhost/public/访问入口文件,你想直接通过localhost/访问,你可以这样写:

rewrite ^/(.*)$ /public/index.php?s=/$1 last;

其实隐藏入口文件就是 nginx 做了下路由,看懂它的正则,其实不难理解。


解析php

如果要 nginx 正常解析 php,首先要在安装好 php 之后,启动 php-fpm。启动方法:

sudo php-fpm -D

上一步完成之后,接下来还是要修改 nginx.conf。server 下找到location ~ .php$这一行,包括它后面{}中的内容,去掉注释,也就是去掉前面的#号,修改成这样:

location ~ .php(/.*)*$ {
      fastcgi_pass   127.0.0.1:9000;
      fastcgi_index  index.php;
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

      fastcgi_split_path_info  ^((?U).+.php)(/?.+)$;
      fastcgi_param  PATH_INFO  $fastcgi_path_info;
      fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
      include        fastcgi_params;
}

如图:

重新载入配置文件。此时 nginx 就可以配合 php-fpm 正确解析 PHP 了。


多站点设置

前面我们修改配置文件的代码位置,都是在 http 下的 server 里。其实一个 server 就相当于一个站点。nginx.conf 下 http 模块默认开启一个 server,就是只有一个站点。如果我们要多站点,就需要添加多个 server。

现在我们要添加一个站点,假设这个站点的域名是 www.test2.com, 但是 server 不写在 nginx.conf 里。nginx 为我们提供了存放多站点配置文件的目录,我们切换到这个目录:

cd /usr/local/etc/nginx/servers/

然后新建配置文件:

vim www.test2.com.conf

里边写一个 server:

server {

    listen  80;
    server_name  www.test2.com;

    index  index.html index.php;

    root  /usr/local/var/test2;

    location / {
         index  index.php index.html;
         rewrite ^/(.*)$ /public/index.php?s=/$1 last;
         break;
    }

    location ~ .php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

        fastcgi_split_path_info  ^((?U).+.php)(/?.+)$;
        fastcgi_param  PATH_INFO  $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
        include        fastcgi_params;
    }
    
}

保存退出,重新载入配置文件。最后在 hosts 中添加:

127.0.0.1   www.test2.com

此时,www.test2.com 就可以访问到你的新项目目录 /usr/local/var/test2下了!


反向代理设置

我的应用场景是这样的。假设我的服务器上存放着一个 node 项目,node 占用着80端口,可以正常运行。但是我想再放一个 php 项目,此时这个php项目就不能是80端口了。如果想 node 项目和 php 项目均适用80端口,则需要利用 nginx 做反向代理设置。

解决方案是,node 项目设置成非 80 端口,比如3000,nginx 添加一个站点,假设是www.test3.com,访问 80 端口,代理到 3000 端口即可。

设置方法如上一节添加新站点:

cd /usr/local/etc/nginx/servers/

然后新建配置文件:

vim www.test3.com.conf

写入一个 server:

server {
    listen 80;
    server_name www.test3.com;
    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}

访问 www.test3.com,就可以访问到 node 项目了!


本文由 杨成功 原创,更多原创内容请到专栏 杨成功的全栈之路

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39525.html

相关文章

  • nginxnginx 配置那些事儿

    摘要:是一款具有高负载能力的服务器,也是架构的主要角色之一。多站点设置前面我们修改配置文件的代码位置,都是在下的里。如果想项目和项目均适用端口,则需要利用做反向代理设置。 nginx 是一款具有高负载能力的 web 服务器,也是 LNMP 架构的主要角色之一。现在越来越多的开发者选择 nginx 作为 php 的好搭档,替代 apache 的位置。下面我以 Mac 系统为例,介绍下 ngin...

    lunaticf 评论0 收藏0
  • [聊一聊系列]聊一聊前端功能统计那些事儿

    摘要:欢迎大家收看聊一聊系列,这一套系列文章,可以帮助前端工程师们了解前端的方方面面不仅仅是代码什么是功能统计作为一名开发,我们的产品发布出去之后,无论是产品还是运营,其实都是想及时了解产品对用户产生的影响的。下一章,我们将继续聊聊速度统计。 欢迎大家收看聊一聊系列,这一套系列文章,可以帮助前端工程师们了解前端的方方面面(不仅仅是代码):https://segmentfault.com/bl...

    PAMPANG 评论0 收藏0
  • [聊一聊系列]聊一聊前端功能统计那些事儿

    摘要:欢迎大家收看聊一聊系列,这一套系列文章,可以帮助前端工程师们了解前端的方方面面不仅仅是代码什么是功能统计作为一名开发,我们的产品发布出去之后,无论是产品还是运营,其实都是想及时了解产品对用户产生的影响的。下一章,我们将继续聊聊速度统计。 欢迎大家收看聊一聊系列,这一套系列文章,可以帮助前端工程师们了解前端的方方面面(不仅仅是代码):https://segmentfault.com/bl...

    妤锋シ 评论0 收藏0

发表评论

0条评论

PrototypeZ

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<