Linux——nginx(以Ubuntu为例,不同系统也就安装和配置文件的的位置不一样,其他都一样的)

Stella981
• 阅读 505

下载安装

下载:猛击这里

安装:

1、进入nginx目录执行:

$ ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre=../pcre-8.39 --with-zlib=../zlib-1.2.8 --with-openssl=../openssl-master

2、编译安装:

$ make && sudo make install

Nginx会被安装在/usr/local/nginx目录下(也可以使用参数--prefix=指定自己需要的位置), 安装成功后 /usr/local/nginx 目录下有四个子目录分别是:conf、html、logs、sbin 。 其中 Nginx 的配置文件存放于 conf/nginx.conf, bin文件是位于 sbin 目录下的 nginx 文件。 确保系统的 80 端口没被其他程序占用,运行 sbin/nginx 命令来启动 Nginx,

3、使用:中文文档

启动nginx:

$sudo /usr/local/nginx/sbin/nginx

查看nginx:

$ sudo netstat -ano|grep 80

Linux——nginx(以Ubuntu为例,不同系统也就安装和配置文件的的位置不一样,其他都一样的)

打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功

Linux——nginx(以Ubuntu为例,不同系统也就安装和配置文件的的位置不一样,其他都一样的)

其他命令:

$ sudo /usr/local/nginx/sbin/nginx -t    # 检查配置文件是否正确

$ sudo /usr/local/nginx/sbin/nginx -V    # 可以看到编译选项

$ sudo /usr/local/nginx/sbin/nginx -s reload    #重启Nginx

$ sudo /usr/local/nginx/sbin/nginx -s stop    # 关闭Nginx,不管是否还有信息交互

$ sudo /usr/local/nginx/sbin/nginx -s quit    # 优雅停止服务

Nginx的3大用途

一、反向代理

正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。 从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。结论就是,正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

从用途上来讲:

正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。
   正向代理还可以使用缓冲特性减少网络使用率。反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。
   反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。
   另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。

Linux——nginx(以Ubuntu为例,不同系统也就安装和配置文件的的位置不一样,其他都一样的)

Django是多线程,假设每个Django的APPserver(应用服务器)可以处理2000个链接(活跃的和非活跃的链接),CPU就需要在这2000个链接中不断地切换,这是非常不明智的选择;所以引入nginx,它采用了Linux的epoll,会监听这20000个链接,只把活跃的链接按照某种调度方式,分发给后面的APPserver。

Nginx的负载均衡模块目前支持4种调度算法:

  • weight 轮询(默认)。每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。weight。指定轮询权值,weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。
  • ip_hash。每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。
  • fair。比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。
  • url_hash。按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。

Linux——nginx(以Ubuntu为例,不同系统也就安装和配置文件的的位置不一样,其他都一样的)

二、负载均衡

负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求按照事先设定分配算法分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。

均衡负载能够平均分配客户请求到服务器列阵,籍此提供快速获取重要数据,解决大量并发访问服务问题

三、静态资源服务器

将静态页面、图片、js、css等数据放到nginx服务器上。

配置文件

Linux——nginx(以Ubuntu为例,不同系统也就安装和配置文件的的位置不一样,其他都一样的)

nginx.conf配置文件,基本就分为以下几块:

main
events   {
  ....
}
http        {
  ....
  upstream myproject {
    .....
  }
  server  {
    ....
    location {
        ....
    }
  }
  server  {
    ....
    location {
        ....
    }
  }
  ....
}

nginx配置文件主要分为六个区域:

  • main(全局设置)
  • events(nginx工作模式)
  • http(http设置)
  • sever(主机设置)
  • location(URL匹配)
  • upstream(负载均衡服务器设置)

1、main模块

main是一个全局的设置:

user nobody nobody;  # 运行nginx的用户和用户组
worker_processes 2;  # work进程数,与cpu核心数有关
error_log  /usr/local/var/log/nginx/error.log  notice;  # 错误日志路径
pid        /usr/local/var/run/nginx/nginx.pid;  # 进程号
worker_rlimit_nofile 1024;  # 可打开文件数

user 来指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行。

worker_processes来指定了Nginx要开启的子进程数。每个Nginx进程平均耗费10M~12M内存。根据经验,一般指定1个进程就足够了,如果是多核CPU,建议指定和CPU的数量一样的进程数即可。我这里写2,那么就会开启2个子进程,总共3个进程。

Linux——nginx(以Ubuntu为例,不同系统也就安装和配置文件的的位置不一样,其他都一样的)

error_log用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。

pid用来指定进程id的存储文件位置。

worker_rlimit_nofile用于指定一个nginx进程可以打开的最多文件描述符数目,这里是65535,需要使用命令“ulimit -n 65535”来设置。

查看系统可打开最大文件数:

$ cat /proc/sys/fs/file-max

 查看可打开文件数:

$ ulimit -a

 修改文件数(改小容易改大难,因为在配置文件中写死了):

$ ulimit -n 文件数

 修改配置文件:

$ sudo vim /etc/security/limits.conf

 在最后添加2行:

#by xwp
*               soft    nofile          65535        # 软配置(当前文件数)
*               hard    nofile          100000    # 硬配置(最大文件数)

重启之后就可以修改了

2、events 模块

events模块来用指定nginx的工作模式和工作模式及连接数上限:

events {
    use epoll; #Linux平台
    worker_connections  1024;  # 最大连接数,一般和打开文件数一样
}

use用来指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中,对于Linux系统,epoll工作模式是首选。

worker_connections用于定义Nginx每个进程的最大连接数,即接收前端的最大请求数,默认是1024。最大客户端连接数由worker_processes和worker_connections决定,即Max_clients=worker_processes*worker_connections,在作为反向代理时,Max_clients变为:Max_clients = worker_processes * worker_connections/4。 进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit -n 65536”后worker_connections的设置才能生效。

3、http 模块

http模块可以说是最核心的模块了,它负责HTTP服务器相关属性的配置,它里面的server和upstream子模块,至关重要,等到反向代理和负载均衡以及虚拟目录等会仔细说。

http{
    include       mime.types;  # 支持多媒体文件类型
    default_type  application/octet-stream;  # 不认识的文件类型,采用二进制流
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  # ip地址-用户名...
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /usr/local/var/log/nginx/access.log  main;  # access_log的路径和使用规则(main)
    sendfile        on;  # 高文件传输(满足一定条件再发送)
    tcp_nopush      on;
    tcp_nodelay     on;
    keepalive_timeout  10;
    #gzip  on;
    upstream myproject {
        .....
    }
    server {
        ....
    }
}

include 来用设定文件的mime类型,类型在配置文件目录下的mime.type文件定义,来告诉nginx来识别文件类型。

default_type设定了默认的类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置asp 的locate 环境时,Nginx是不予解析的,此时,用浏览器访问asp文件就会出现下载了。

log_format用于设置日志的格式,和记录哪些参数,这里设置为main,刚好用于access_log来纪录这种类型。

main的类型日志如下:也可以增删部分参数

127.0.0.1 - - [21/Apr/2015:18:09:54 +0800] "GET /index.php HTTP/1.1" 200 87151 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36"

access_log

用来纪录每次的访问日志的文件地址,后面的main是日志的格式样式,对应于log_format的main。

sendfile参数用于开启高效文件传输模式。将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞。

keepalive_timeout设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接。

4、server 模块

sever 模块是http的子模块,它用来定一个虚拟主机,我们先讲最基本的配置,这些在后面再讲。

server {
        listen       8080;
        server_name  localhost 192.168.12.10 www.yangyi.com;
        # 全局定义,如果都是这一个目录,这样定义最简单。
        root   /Users/yangyi/www;
        index  index.php index.html index.htm; 
        charset utf-8;
        access_log  usr/local/var/log/host.access.log  main;
        aerror_log  usr/local/var/log/host.error.log  error;
        ....
}

server标志定义虚拟主机开始。

listen用于指定虚拟主机的服务端口。

server_name用来指定IP地址或者域名,多个域名之间用空格分开。

root 表示在这整个server虚拟主机内,全部的root web根目录。注意要和locate {}下面定义的区分开来。

index 全局定义访问的默认首页地址。注意要和locate {}下面定义的区分开来。

charset用于设置网页的默认编码格式。

access_log用来指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式。

5、location 模块

location模块是nginx中用的最多的,也是最重要的模块了,什么负载均衡啊、反向代理啊、虚拟域名啊都与它相关。

location 根据它字面意思就知道是来定位的,定位URL,解析URL,所以,它也提供了强大的正则匹配功能,也支持条件判断匹配,用户可以通过location指令实现Nginx对动、静态网页进行过滤处理。像我们的php环境搭建就是用到了它。

我们先来看这个,设定默认首页和虚拟机目录。

location / {
            root   /Users/yangyi/www;
            index  index.php index.html index.htm;
        }

location /表示匹配访问根目录。

root指令用于指定访问根目录时,虚拟主机的web目录,这个目录可以是相对路径(相对路径是相对于nginx的安装目录)。也可以是绝对路径。

#反向代理配置
  location /abc/ {
             proxy_pass http://127.0.0.1:12345;
             proxy_set_header X-real-ip $remote_addr;
             proxy_set_header Host $http_host;
         }


  #采用uwsgi方式
  location /123/ {
             include uwsgi_params;
             uwsgi_pass 127.0.0.1:33333;
         }



    #访问nginx本机目录的文件
    location / {
            root   /home/itcast/xwp/itcast/;
            index  index.html index.htm;
        }

    location  /static/ {
             alias /var/static/;
        }

6、upstram 模块

upstream 模块负债负载均衡模块,通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。默认配置文件没有这一块,可以在http里面server外面自行配置这一块。

upstream test.com{
    ip_hash;  # 采用的哪种负载均衡算法
    server 192.168.123.1:80;
    server 192.168.123.2:80 down;  # 相当于没有这个APPserver
    server 192.168.123.3:8080  max_fails=3  fail_timeout=20s;  # 最大请求失败次数,当超过最大失败数后暂停服务的时间
    server 192.168.123.4:8080;
}

在上面的例子中,通过upstream指令指定了一个负载均衡器的名称test.com。这个名称可以任意指定,在后面需要的地方直接调用即可。

在HTTP Upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。常用的状态有:

down,表示当前的server暂时不参与负载均衡。

backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。

max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。

fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。

注意 当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。

备注: nginx的worker_rlimit_nofile达到上限时,再有客户端链接报502错误. 用了log_format指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径.

7、使用

Linux——nginx(以Ubuntu为例,不同系统也就安装和配置文件的的位置不一样,其他都一样的)

nginx中的每个server就是一个反向代理配置,可以有多个server

完整配置:

worker_processes  1;

events {
    worker_connections  1024;
}

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

    gzip  on;
    server {
        listen       80;
        server_name  manage.leyou.com;

        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        location / {
            proxy_pass http://127.0.0.1:9001;
            proxy_connect_timeout 600;
            proxy_read_timeout 600;
        }
    }
    server {
        listen       80;
        server_name  api.leyou.com;

        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        location / {
            proxy_pass http://127.0.0.1:10010;
            proxy_connect_timeout 600;
            proxy_read_timeout 600;
        }
    }
}
点赞
收藏
评论区
推荐文章
芝士年糕 芝士年糕
2年前
nginx 启动、停止、关闭
使用3A服务器搭建的centos系统安装nginx教程在我的往期博客中1,nginx指定配置文件/usr/local/nginx/sbin/nginxc/usr/local/nginx/conf/nginx.conf1c参数指定了要加载的nginx配置文件路径1,从容停止Nginx:killQUIT主进程号2,快速停止Nginx:kil
Stella981 Stella981
3年前
Nginx配置https
一、开启nginx的ssl模块1.未安装过nginx,编译安装配置参数如下:./configure\prefix/usr/local/nginx\withpcre\withhttp\_ssl\_modulessl模块\withhttp\_stub\_status\_module\wit
Stella981 Stella981
3年前
FastDFS 配置 Nginx 模块及访问测试
备注:以下nginx1.10.3源码目录根据nginx版本号不同会有相应的变化,以nginx版本号为准一、安装Nginx和fastdfsnginxmodule1,安装Nginx请看:Nginx安装教程2,下载fastdfsnginxmodule模块,这里是通过wget下载:wgethttps://nchc.dl
Stella981 Stella981
3年前
Linux和Windows环境下安装Nginx
Nginx的安装windows环境下安装Nginx安装Nginx的下载地址如下:http://nginx.org/en/download.html(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fngi
Stella981 Stella981
3年前
Linux下Nodejs安装之Hello World
去官网下载安装包nodev0.12.7.tar.gz1.mkdir/usr/local/nodejs2.tarzvxfnodev0.12.7.tar.gz3\.cdnodev0.12.7.tar.gz4\../configureprefix/usr/local/nodejs5.make&&makeins
Stella981 Stella981
3年前
Nginx 模块分类
L:34!(https://oscimg.oschina.net/oscnet/3f218ca9379733d571a853b919759402668.png) 我们进入Nginx安装目录来查看上述模块的位置在src目录下每个模块对应的文件夹如下 /usr/local/nginx/nginx1.14.2/srcro
Stella981 Stella981
3年前
Linux下Nginx1.9.9的安装
1.环境安装 yuminstallgccc 、yumyinstallpcre\、yumyinstallopenssl\(安装顺序安装)2.下载压缩包(这里我使用的是老本,新版可自行尝鲜)①cd/usr/local/② wgethttp://nginx.org/download/nginx
Wesley13 Wesley13
3年前
mysql 5.6.36 rpm 安装
服务版本CentOS6.4所有命令均在/usr/local目录下执行mysql安装包下载地址https://dev.mysql.com/downloads/mysql/5.5.htmldownloads(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fdev.my
Stella981 Stella981
3年前
Linux下安装与配置nginx
第一次发表内容,希望大家多多支持1,下载文件就不多说了,从官方下载即可,这里用的版本为nginx1.5.12,目前是最新版2,安装时遇到了一些问题,需要安装重写依赖包等,如下所示,解压后运行./configureprefix/usr/local/environment/reverseproxy/nginxwithhttp\_s
Wesley13 Wesley13
3年前
Ubuntu18.04.1
Ubuntu18.04.1LTS64配置php、nginx、redis重要的说在前面:1.以下安装均在系统根目录进行,即:ubuntu@VM08ubuntu:/$这里执行命令;2.以下配置文件修改最好先把原始文件备份1.安装nginx,输入命令:sudoapt