Nginx 详解(Macos 下安装nginx)

5,934 阅读5分钟

Nginx 介绍就不在这里写了,既然你看到这篇文档, 应该对已经nginx 有了了解。

安装工具:Homebrew (Macos 下安装nginx)

先安装 Homebrew,只需要打开终端,输入如下一行代码即可

Mac-homebrew安装使用

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

使用 Homebrew 安装 Nginx,常用命令:

1. brew搜索软件命令: brew search nginx  
2. brew安装软件命令: brew install nginx
3. brew卸载软件命令:  brew uninstall nginx

nginx -v   验证 nginx 是否安装成功, 若显示版本信息则证明安装成功。

1.在终端输入如下命令:(这里可以看到nginx的安装目录)

查询本机nginx情况

brew info nginx

图1:

ng1.png

  • Not installed — nginx在本地还未安装
  • From — nginx的下载地址
  • /usr/local/var/www — Docroot默认路径 8080
  • 为 /usr/local/etc/nginx/nginx.conf 配置文件中被配置的默认端口,nginx运行时不需要加sudo nginx将在/usr/local/etc/nginx/servers/目录中加载所有文件 可以通过最简单的命令 ‘nginx’ 来启动nginx。

2.若是没有安装,正式开始安装

brew安装软件命令: brew install nginx

图2:

ng2.png

会显示安装目录在: /usr/local/Cellar/nginx

验证 Nginx 是否安装成功, 若显示版本信息则证明安装成功。

 nginx -v 

3.在安装号后可以再次查看nginx 信息,再次执行

brew info nginx

图3: ng3.png

可以看到安装目录是在: /usr/local/Cellar/nginx 下, 在图2(安装时候的) 中图也可以看到

因此:

/usr/local/Cellar/nginx  // 这个才是nginx被安装到的目录
/usr/local/etc/nginx/    // 这个是nginx 的配置路径

4.启动nginx,终端输入如下命令:

nginx

5.打开浏览器访问:localhost:8080看是否安装成功

111.png

可以正常访问,因此安装成功。

配置相关信息

1.查看安装信息,打开安装目录:

open /usr/local/Cellar/nginx   //其实这个是nginx被安装到的目录

nginx2.png

会看到一个以当前安装的nginx的版本号为名称的文件夹,这个就是我们安装的nginx根目录啦。进入1.15.12/bin 目录,会看到nginx的可执行启动文件。

  同样的,我们在1.15.12/目录下还可以看到一个名字为html的快捷方式文件夹,进入该目录后,它有两个文件50.html和index.html,如图所示。进入该目录我们会发现其实它指向的就是/usr/local/var/www目录(如上图 箭头,点击html 文件夹,文件头 显示 www),这个在上面我们查看的info信息中有提到(Dcroot)

2.查看nginx配置目录, 如下命令:

open /usr/local/etc/nginx/

如图: nginx1.png

打开nginx目录后,可以看到我们上面的使用 brew info nginx 查看信息所说的 server目录以及nginx.conf的配置文件,详细配置如下 。

3.了解一下nginx的配置文件(/usr/local/etc/nginx/nginx.conf)

# 在配置文件的顶级main部分,代表worker角色的工作进程的个数
worker_processes  1;

# 错误日志
error_log       /usr/local/var/log/nginx/error.log warn;

# 进程文件
pid        /usr/local/var/run/nginx.pid;

events {
    # 写在events部分。每一个worker进程能并发处理(发起)的最大连接数
    worker_connections  256;
}

http {

    # 文件扩展名与文件类型映射表
    include       mime.types;

    # 设定默认文件类型
    default_type  application/octet-stream;

    # 为Nginx服务器设置详细的日志格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';

    #access log 记录了哪些用户,哪些页面以及用户浏览器、ip和其他的访问信息

    # access log 路径
    access_log      /usr/local/var/log/nginx/access.log main;

    # 如果port_in_redirect为off时,那么始终按照默认的80端口;如果该指令打开,那么将会返回当前正在监听的端口。

    port_in_redirect off;

    # 开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
    sendfile        on;

    # 配置信息文件夹,/usr/local/etc/nginx/servers/*.conf
    include servers/*.conf;

}

配置文件中有很多#, 开头的表示注释内容,我们去掉所有以 # 开头的段落,精简之后的 内容如下:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

简写配置为

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  m.lu.com;

 
        # 这些子系统信息 可以集中配置在这里, 也可以单文件系统配置在 servers 文件夹
        location /h5-market/ {
            proxy_pass http://127.0.0.1:8901/h5-market
            proxy_set_header Host $http_host
        }
        
        location /h5-lumkt/ {
            proxy_pass http://127.0.0.1:8981/h5-lumkt
            proxy_set_header Host $http_host
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        
    }
}

或简写配置

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  m.lu.com;

        # 这些子系统信息 可以集中配置在这里, 也可以单文件系统配置在 servers 文件夹
        #location /h5-market/ {
        #    proxy_pass http://127.0.0.1:8901/h5-market
        #    proxy_set_header Host $http_host
        #}
        
        #location /h5-lumkt/ {
        #    proxy_pass http://127.0.0.1:8981/h5-lumkt
        #    proxy_set_header Host $http_host
        #}
        
        
        location /images/ {
            alias /Users/www/test/;
        }
        
        # 配置信息文件夹,/usr/local/etc/nginx/servers/*.conf          
        # 在servers 文件夹下建 xxx.conf 也可, 如下(在servers文件夹下建 h5-market.conf 配置)
        
        include servers/*.conf;
        
    }
}


在servers 文件夹下建 h5-market.conf 配置

# 虚拟主机配置

server {

    # 监听端口
    listen       80;

    # 域名设定,可以有多个
    server_name  m.lu.com;

    location /h5-market/ {
         proxy_pass http://127.0.0.1:8901/h5-market
         proxy_set_header Host $http_host
    }
}

nginx 配置文件有三部分组成

第一部分:全局块

从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。 比如上面第一行配置的:

worker_processes 1;

这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是 会受到硬件、软件等设备的制约。

第二部分:events块 比如上面的配置: events { worker_connections 1024; } events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否 允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。 上述例子就表示每个 work process 支持的最大连接数为 1024. 这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

第三部分:

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。

需要注意的是:http 块也可以包括 http全局块、server 块。

http全局块 http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。 server 块 这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。 每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。 而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。 全局 server 块 最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。 location 块 一个 server 块可以配置多个 location 块。 这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。 地址定向、数据缓 存和应答控制等功能,还有许多第三方模块的配置也在这里进行

Nginx 反向代理 配置实例

实现效果

实现效果:使用 nginx 反向代理(把一个端口映射到另一个端口上),根据访问的路径跳转到不同端口的服务中 nginx 监听端口为 9001, 访问 http://127.0.0.1:8080/h5-market/ 直接跳转到 127.0.0.1:8901/h5-market/ 访问 http://127.0.0.1:9000/h5-lumkt/ 直接跳转到 127.0.0.1:8981/h5-lumkt/

总结nginx常见的配置

nginx的配置文件路径:/usr/local/etc/nginx/nginx.conf
nginx的服务器默认路径:/usr/local/var/www
nginx的安装路径:/usr/local/Cellar/nginx/1.15.5

Nginx 启动命令是:

    1. nginxsudo nginx

Nginx 重启命令是:

  • 1.sudo nginx -s reload 重新配置后都需要进行重启操作
  • 2.通过brew,brew services start nginx(启动nginx) brew services restart nginx(重启命令)
  • 3.先进入bin目录:cd /usr/local/Cellar/nginx/1.15.5/bin/, 然后再执行:./nginx -s reload

ps:

参考1

参考2

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第2 天,点击查看活动详情