如何在linux上安装使用nginx

一、nginx背景

  nginx是一款HTTP的服务器,是基于c语言开发的高性能的服务器。能够实现反向代理和负载均衡的功能,反向代理:简单的说就是将一个域名转换成另外一个域名,或者是将某个位置的静态资源转换为可以提供域名访问的功能。负载均衡:就是同样的服务,在不同的地方启动,nginx自动分配访问什么服务器,以减少服务器压力。

二、nginx在linux上的环境准备

安装之前我们需要检查一下linux的环境是否能够安装nginx

Nginx是C语言开发,建议在linux上运行,本文档使用Centos7.0作为安装环境.
1)gcc
安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc
需要执行的命令:yum install gcc-c++ 
2)PCRE
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
需要执行的命令:yum install -y pcre pcre-devel
3)zlib
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
需要运行的命令:yum install -y zlib zlib-devel
4)openssl
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
需要运行的命令:yum install -y openssl openssl-devel

三、nginx开始安装

  下载nginx我这里提供的是官网地址为:http://nginx.org/ 在这里找到你想到的版本,一般情况我们下载最新的稳定版本。这里我们下载linux版本的。下载之后我们可以通过Xftp这款软件将文件上传到linux服务器中。下面是我下载的nginx。

然后我们进入这个压缩文件的文件夹,执行加压命令:

# tar -zxvf nginx-1.14.0.tar.gz

我们解压成功直接,进入解压的文件夹中依次执行下面命令:

# ./configure 

(补充,发现./configure 报错需要先安装zlib,pcre,openssl,如果没报错不用执行{}命令

{

ubuntu安装的时候

dpkg -l | grep zlib  查看zlib是否安装

sudo apt-get install openssl libssl-dev 解决依赖包openssl安装

sudo apt-get install libpcre3 libpcre3-dev 解决依赖包pcre安装

sudo apt-get install zlib1g-dev 解决依赖包zlib安装

centos安装的时候可以直接使用yum命令

yum -y install pcre-devel openssl openssl-devel

}

# make

# make install

上面这三个命令直接的过程中可能会需要等待一小会。当我们执行完成之后就可以输入命令:

# whereis nginx

找到安装的路径位置了。然后我们进入该路径

# cd /usr/local/nginx

这个路径中有一个文件夹sbin,进入sbin里面有一个shell文件,我们启动它

# ./nginx

然后我们可以通过访问在浏览器访问

就代表我们安装成功了,当然如果你无法访问成功,下面你可以关闭防火墙,或者打开防火墙的80端口

关闭防火墙命令: 

# service iptables stop

四、反向代理配置

  上面我们介绍完了安装,我们下面可以开始进行配置反向代理了,同样我们进入文件夹

# cd /usr/local/nginx

这里有一个配置的文件夹conf,我们进入这个文件夹会发现一个配置文件,nginx.conf 下面我执行命令对他进行编辑

# vi nginx.conf

下面是我创建的配置内容,server可以创建很多个,就是所他默认的我们不删除,不管他,我们之间和他同级创建一个,

listen后面是端口号,依次下来是地址,连接数,然后是地址后面可以配一个级别我这里写了个hello

alias后面为文件的文件夹,我的wanmeng文件夹下面有一个index.html的文件,这样我们就成功了

我们就可以重启nginx了。去访问我刚刚写好的index.html了,重启命令:

# ./nginx -s reload

到这里,我们的反向代理就完成了。

五、负载均衡配置

负载均衡配置下面就简单说下,官网也给出了一个最简单的方案。

http://nginx.org/en/docs/http/load_balancing.html

http {
    upstream myapp1 {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://myapp1;
        }
    }
}

我们可以看到负载均衡就是靠一个upstream标签完成的。但是我这里要说的是,这样配置,会出现1个请求过去,三个接口都会响应的情况。

一般在项目中我们还可以加上一句配置。如下:

http {
    upstream myapp1 {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
        ip_hash;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://myapp1;
        }
    }
}

大家可以看到我这里加了一句ip_hash;就做到了所有请求都会只在第一台服务器上,第一台挂了,自动响应到第二台。但是这样还不够,我们如果有登录的情况,前端和第一台创建了session会话,会出现跳转到第二台的时候,出现问题。这里有解决方案是我前面提到的使用redis做session共享。https://blog.csdn.net/miwanmeng/article/details/84940953

当然我们还可以在nginx做出如下配置。

六、总结

其实在大型的分布式的项目中,nginx是非常常用的一个中间件,任何前后端分离,或者集群项目都会使用到,所以这里我们就算不够了解它的原理,但是我们要保证做到可以配置,可以自由安装的操作方式。

猜你喜欢

转载自blog.csdn.net/miwanmeng/article/details/82012651