零基础学Nginx【2】| Nginx 常用的命令和配置文件

2021-01-27 16:44:51 浏览数 (1)

前言

通过前面一篇文章(?零基础学Nginx【1】 | Nginx基础概念入门)的学习,我们已经知道了Nginx是一款高性能的代理服务器软件,支持正向代理反向代理。同时,Nginx还能实现服务器的集群和负载均衡,支持插件式开发。除此之外,Nginx还有很多十分强大的功能,如对客户端限流缓存动态黑白名单和实现灰度发布等。本篇我们就来介绍Nginx的安装和配置。

Nginx的安装

安装和配置Nginx之前,我们需要先安装一些Nginx相关的依赖。

  • gcc
  • pcre
  • openssl
  • zlib

gcc

安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:

代码语言:javascript复制
yum install gcc-c  

PCRE

PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库。pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:

代码语言:javascript复制
yum install -y pcre pcre-devel

OPENSSL

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。

Nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。

代码语言:javascript复制
yum install -y openssl openssl-devel

zlib

当Nginx需要支持压缩功能时,如需要对上传的图片和传输的数据进行压缩处理,就需要使用到zlib。zlib 库提供了很多种压缩和解压缩的方式, 所以需要在 Centos 上安装 zlib 库。

代码语言:javascript复制
yum install -y zlib zlib-devel

安装Nginx

下载nginx,两种方式

  1. 直接下载 .tar.gz安装包,地址:

https://nginx.org/en/download.html

  1. 使用wget命令下载(推荐)。确保系统已经安装了wget,如果没有安装,执行yum install wget 安装。
代码语言:javascript复制
wget -c https://nginx.org/download/nginx-1.12.2.tar.gz

依然是直接命令:

代码语言:javascript复制
# 解压
tar -zxvf nginx-1.12.2.tar.gz
# 进入解压目录
cd nginx-1.12.2

开始配置:

其实在 nginx-1.12.0 版本中你就不需要去配置相关东西,默认就可以了。当然,如果你要自己配置目录也是可以的。

使用默认配置

代码语言:javascript复制
./configure

编译安装

代码语言:javascript复制
make && make install

编译完成之后, 我们启动Nginx

代码语言:javascript复制
cd /usr/local/nginx/sbin
./nginx 

可以查看Nginx的进程

代码语言:javascript复制
[root@localhost conf]#  ps aux|grep nginx
root     108255  0.0  0.0  20540   600 ?        Ss   15:09   0:00 nginx: master process ./nginx
nobody   108256  0.0  0.1  23068  1608 ?        S    15:09   0:00 nginx: worker process
root     108636  0.0  0.0 112824   980 pts/1    R    16:06   0:00 grep --color=auto nginx

在浏览器中输入IP,例如192.168.100.128 可以看到这样的页面,说明我们的Nginx就启动成功了。

Nginx的默认安装路径为:/usr/local/nginx/ ,如果想要更改路径,需要采用软链接的方式进行设置。

我们打开 Nginx 的配置文件

代码语言:javascript复制
vi /usr/local/nginx/conf/nginx.conf

可以发现默认 listen 的值是 80

说明我们现在默认的访问端口是: 80 ,我们再通过ip 端口访问也是一样的。

但我们现在用的是Linux系统,默认情况下有防火墙。我们Nginx的访问端口是 80,默认是访问不了的,也就是我们会看不到界面。因此我们需要在防火墙中设置开放的端口。

代码语言:javascript复制
# 查看开放的端口
firewall-cmd --list-all
代码语言:javascript复制
# 设置开放的端口
[root@localhost conf]# firewall-cmd --add-service=http --permanent
success
[root@localhost conf]# firewall-cmd --add-port=80/tcp --permanent
success
# 重启防火墙
[root@localhost conf]# firewall-cmd --reload
success

我们再次查看开放的端口,就可以发现 80 端口已经被添加进来了。

Nginx中常用命令

使用 Nginx 操作命令前提条件:必须进入 nginx 的 目录 /usr/local/nginx/sbin

代码语言:javascript复制
cd /usr/local/nginx/sbin/

查看版本号

代码语言:javascript复制
[root@localhost sbin]# ./nginx -v
nginx version: nginx/1.12.2

查找安装路径:

代码语言:javascript复制
[root@localhost sbin]# whereis nginx
nginx: /usr/local/nginx

启动,停止,重加载

代码语言:javascript复制
 cd /usr/local/nginx/sbin/
 ./nginx 
 ./nginx -s stop   # 启动
 ./nginx -s quit   # 退出
 ./nginx -s reload   # 重新加载(配置文件重新加载,我们就无需重启生效)

Nginx的配置

Nginx 安装目录下,其默认的配置文件都放在这个目录的 conf 目录下,而主配置文件 nginx.conf也在其中,后续对 nginx 的使用基本上都是对此配置文件进行相应的修改。

打开配置文件,我们可以很明显的将 nginx.conf 配置文件分为三部分:

第一部分:全局块

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

比如上面第一行配置的:

代码语言:javascript复制
worker_processes  1;

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

第二部分:events块

比如上面的配置:

代码语言:javascript复制
events {
    worker_connections  1024;
}

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。

上述例子就表示每个 work process 支持的最大连接数为 1024 。 这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

第三部分:http 块

代码语言:javascript复制
http {
    include       mime.types;
    default_type  application/octet-stream;

    #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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。我们后面要介绍的反向代理,负载均衡,动静分离都是在这里配置的。

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

  • http 全局块

http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

代码语言:javascript复制
include       mime.types;
    default_type  application/octet-stream;

    #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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
  • server 块
代码语言:javascript复制
server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。

而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。我们后边讲解Nginx实例,也主要是在这部分进行修改。

巨人的肩膀

https://www.bilibili.com/video/BV1zJ411w7SV?p=7

彩蛋

有幸收集过一份关于Nginx的面试专题,需要的朋友可以关注【猿人菌】后台回复“Nginx”进行获取。

小结

本篇文章到这里就结束了,不知道小伙伴们都掌握得怎么样呢!下一期,我们要学习Nginx的安装和Nginx常用命令的使用,敬请期待!你知道的越多,你不知道的也越多,我是Alice,我们下一期见!

一键三连,养成习惯~

文章持续更新,可以微信搜一搜「 猿人菌 」第一时间阅读,思维导图,大数据书籍,大数据高频面试题,海量一线大厂面经…期待您的关注!

0 人点赞