Nginx从安装到入门,基础篇

作为一个前端开发人员,懂点服务器端的知识也是必不可少的,毕竟,我们可不想为了做一个简单的测试还得去麻烦别人,自给自足,没什么不好。如果你有时间和精力,向全栈迈进也未尝不可。

我最近正在做一个仿iOS端微信的聊天App-WChat,从前端到后台,全都是靠自己来实现。所以最近也接触了一些服务器知识,后面还准备了一篇关于Node.js的文章。该项目的WebSocket是通过Node.js来实现的,后期的数据请求可能也是基于Node.js实现。

Nginx介绍

Nginx(engine x)是一个高性能的HTTP服务器(其实不止HTTP服务器),一般主要用作负载均衡反向代理(如果你不清楚什么是反向代理,可以阅读我的另一篇文章)。

Nginx有一个主进程和很多工作进程,主进程的作用只有一个:通过读取配置文件(nginx.conf)来维持工作进程正常工作。工作进程对应的才是实际的请求(request),Nginx会自动将客户端的请求高效的分发给工作进程。工作进程的数量在配置文件中定义,或者通过CPU的核心数自动调整。(可参考官方文档)

在Linux系统下,Nginx的配置文件默认在/usr/local/nginx/conf/nginx.conf/etc/nginx/nginx.conf/usr/local/etc/nginx/nginx.conf中。我是在CentOS系统下使用的Nginx,本篇就基于CentOS来介绍。

Nginx安装

对于Nginx的安装,官方的文档在这里,建议参阅官方说明(比较考验英文)。我是一路上踏过很多坑才把Nginx安装好(主要是由于Nginx版本和Linux版本都在不断更新,而百度出来的大多数教程都是过时的,或多或少都会有些问题)。

yum安装

推荐使用yum来安装,简单省事。官方链接

方法很简单,首先创建/etc/yum.repos.d/nginx.repo文件,然后写入以下内容:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1

其中的OS是你的Linux版本,我的是centos,直接替换就好。OSRELEASE是版本号,6.x就写6,7.x就写7。比如我的baseurl就是http://nginx.org/packages/centos/6/$basearch/

然后就可以直接使用yum install -y nginx命令来一建安装,搞定。

通过yum安装的Nginx的配置文件可能位于/etc/nginx/nginx.conf

源码安装

不推荐使用这种方法,对于新手来说太折腾了。首先要安装依赖包:gccg++PCREzlibopenSSL

安装依赖

  • 安装gccg++,用来编译源码;
$ yum install -y gcc gcc-c++
  • PCRE,Perl正则表达式;
$ yum install pcre pcre-devel
  • zlib,gzip压缩;
$ yum install zlib zlib-devel
  • OpenSSL,SSL协议。
$ yum install openssl openssl-devel

如果你爱折腾,这些依赖包也可以下载源码,通过编译来安装。这里最头疼的就是版本之间的差异,涉及到的依赖包太多,有时候版本之间就会不兼容,或者需要其他的一些配置。

安装Nginx

去官网下载Nginx,最好不要下载最新版本,如果最新版本跟网上大多数教程说的有差异的话,真的很折腾人。

Linux下命令行操作:

# 下载源码
$ wget http://nginx.org/download/nginx-1.13.0.tar.gz

# 解压源码
$ tar xvf nginx-1.13.0.tar.gz

# 进入源码目录
$ cd nginx-1.13.0
# 配置、编译、安装
$ ./configure
$ make
$ make install

如果顺利的话,Nginx就已经安装完成啦。如果不顺利的话,就自行百度去或直接采用上面介绍的yum来安装。./configure命令可以带很多参数进行配置,我记不住那么多,需要的话还是自行百度。

这就是安装Nginx大概的流程,先安装依赖,再安装Nginx。不同系统不同版本之间可能会有差异,按照上面的方法你也不一定会成功。起初我在./configure这一步就总是失败,就算带上详细的参数(--sbin-path之类的)也是失败。

Nginx基本使用

如果你已经成功安装Nginx,那么你现在直接在命令行中敲入nginx,然后回车,即可启动Nginx服务器。这时,你就可以在客户端输入你服务器的IP地址,就可以访问服务器默认的页面了。

启动、停止、重新加载配置信息

启动Nginx之后,你就可以使用下面的命令格式进行简单的操作了。

$ nginx -s signal

其中,signal可以是以下指令:

  • stop:关闭Nginx,会立刻终止所有的客户端请求。
  • quit:关闭Nginx,直接翻译过来就是优雅的关闭。它会等当前所有的请求完成之后再关闭Nginx。
  • reload:重新加载配置文件。一般当你修改配置文件后,使用它可以让修改的配置生效。
  • reopen:重新打开日志文件,目前还没用到它。

官方还介绍了通过kill指令来向Nginx进程发送这些操作信号。

配置文件简单说明

打开配置文件vim /usr/local/nginx/conf/nginx.conf,文件结构大致如下:

http {
    server {
        listen  80;
        server_name www.mohng.com;
        
        location / {
            root    html;
            index   index.html index.htm;
        }
        
        location /wchat {
            root    html;
            index   index.html;
        }
    }
    
    server {
        listen  8080;
        serer_name  mail.mohng.com;
        
        location / {
            index index.html;
        }
    }
}

其中,一个server就相当于一个服务器,你可以配置多个server模块来虚拟多个服务器。listen表示该服务器监听哪个端口,默认是80端口。server_name表示匹配主机名,比如我的server_namewww.mohng.com,那么,当客户端通过域名www.mohng.com(前提是该域名已经正确解析到该服务器的IP地址)来访问的时候,就是匹配到这个服务器。如果客户端通过域名mail.mohng.com:8080来访问的时候,就会匹配到下面那个服务器。如果你通过IP直接访问,会默认访问第一个服务器。

location就是匹配的路由,root是返回给客户端资源文件的根目录,它是相对nginx路径的,也可以指定绝对路径(比如:/usr/local/nginx/www)。index就是默认返回的文件名(比如index.htmlindex.phpindex.asp等)。

配置简单的反向代理服务器,只需在匹配到的路由location模块中,使用proxy_pass来转到真实的服务器。

location / {
    proxy_pass http://www.baidu.com;
}

更多配置文件的详细说明请参阅官方文档。

总结

其实,Nginx本身不难,难的是操蛋的英文。现在大多数工具、框架、技术文档,都是大篇大篇的英文,看起来实在痛苦。就比如ReactVue,我相信在国内,学好Vue比学好React要容易的多吧。

不管什么东西,最好的学习途径还是官方文档,毕竟,官方的文档永远都是最新的。就拿webpack来说,现在网络上大部分教程都还是基于1.x的,如果直接拿来在2.x中使用全是坑。

你可能感兴趣的:(Nginx从安装到入门,基础篇)