【nginx】nginx 配置那些事兒

nginx 是一款具備高負載能力的 web 服務器,也是 LNMP 架構的主要角色之一。如今愈來愈多的開發者選擇 nginx 做爲 php 的好搭檔,替代 apache 的位置。下面我以 Mac 系統爲例,介紹下 nginx 的配置php

基本配置

打開 nginx.conf,找到 http 下的 server,前幾行的內容分別是:html

listen  8080;                #監聽端口
server_name  localhost;      #本地域名
root  /usr/local/var/www;    #項目根目錄

nginx 默認監聽8080端口,你能夠改爲 80 端口。默認項目根目錄也能夠更改。不過更改以後要從新載入配置文件才能生效:node

sudo nginx -s reload

注意:若是你不喜歡localhost,你想要一個個性的本地域名,好比www.test.com,首先要編輯 hosts 文件:nginx

sudo vim /etc/hosts

添加一條:web

127.0.0.1     www.test.com

而後修改 nginx.conf:apache

server_name    www.test.com

總之 nginx.conf 中設置的域名,必須在 hosts 文件中存在!vim


隱藏入口文件

在咱們開發項目的時候,通常會有隱藏入口文件的需求。依然是在 http 下的 server,咱們找到location /,在大括號內作修改。切記ci框架和tp框架的寫法稍有不一樣,具體以下:segmentfault

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;
}

如圖:

clipboard.png

從新載入配置文件。此時 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 項目了!


本文由 楊成功 原創,更多原創內容請到專欄 楊成功的全棧之路

相關文章
相關標籤/搜索