—-慢慢来比较快,虚心学技术—-

Nginx知识概览

Nginx是什么?

Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。

Nginx是Apache的同行,一种基于REST风格的WEB服务器

然而,由于Apache年代久远,被设计为一个重量级的服务器,并不支持高并发,大量的访问将导致大量的内存消耗。所以,轻量级高并发服务器Nginx就应运而生了

Nginx有什么用?

处理静态文件,索引文件以及自动索引;打开文件描述符缓冲

无缓存的反向代理加速

简单的负载均衡和容错

作为web服务器

Nginx进程模型

master 进程**主要用来管理 worker 进程**,包含:接收来自外界的信号,向各 worker 进程发送信号,监控 worker 进程的运行状态,当 worker 进程退出后(异常情况下),会自动重新启动新的 worker 进程。

worker进程**处理基本的网络事件,各worker进程之间是平等且独立的,一个请求仅会由一个worker进程处理,一个worker进程不可能处理其他worker进程的请求**

image.png

实际上,作为管理员仅需要和master进程进行通信,master会去根据管理员的指令去管理worker进程,而worker进程仅用来处理客户端请求

Yum安装Nginx

查看yum源是否存在nginx安装包

  1. yum search nginx

image.png

安装nginx

yum -y install nginx

image.png

查看nginx安装包

rpm -qa|grep nginx

image.png

查看nginx安装文件

rpm -ql nginx-1.12.2-3.el7.x86_64

结果:
/etc主要放置nginx配置文件
/usr/bin放置nginx命令
/usr/lib放置nginx的函数库
/usr/share放置nginx的资源文件如文档和许可

/var放置nginx的动态内容如缓存和日志
/etc/logrotate.d/nginx
/etc/nginx/fastcgi.conf
/etc/nginx/fastcgi.conf.default
/etc/nginx/fastcgi_params
/etc/nginx/fastcgi_params.default
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/mime.types.default
/etc/nginx/nginx.conf
/etc/nginx/nginx.conf.default
/etc/nginx/scgi_params
/etc/nginx/scgi_params.default
/etc/nginx/uwsgi_params
/etc/nginx/uwsgi_params.default
/etc/nginx/win-utf
/usr/bin/nginx-upgrade
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx/modules
/usr/sbin/nginx
/usr/share/doc/nginx-1.12.2
/usr/share/doc/nginx-1.12.2/CHANGES
/usr/share/doc/nginx-1.12.2/README
/usr/share/doc/nginx-1.12.2/README.dynamic
/usr/share/doc/nginx-1.12.2/UPGRADE-NOTES-1.6-to-1.10
/usr/share/licenses/nginx-1.12.2
/usr/share/licenses/nginx-1.12.2/LICENSE
/usr/share/man/man3/nginx.3pm.gz
/usr/share/man/man8/nginx-upgrade.8.gz
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx/html/404.html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/usr/share/nginx/html/nginx-logo.png
/usr/share/nginx/html/poweredby.png
/usr/share/vim/vimfiles/ftdetect/nginx.vim
/usr/share/vim/vimfiles/ftplugin/nginx.vim
/usr/share/vim/vimfiles/indent/nginx.vim
/usr/share/vim/vimfiles/syntax/nginx.vim
/var/lib/nginx
/var/lib/nginx/tmp
/var/log/nginx

查看nginx运行状态

service nginx status

image.png

或:

ps -ef|grep nginx

image.png

可以看到,nginx启动会开启master进程和worker进程。事实上,会开启一个master进程和多个worker进程

启动nginx

systemctl start nginx.service

service nginx start

查看端口占用情况

netstat -ntlp

image.png

Nginx默认占用端口是80

RPM安装nginx

安装nginx依赖包gcc zlib-devel pcre-devel openssl openssl-devel

yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

image.png

image.png

下载nginx安装包到/usr/src目录下(常作为软件安装包的存放位置)

cd /usr/src

wget http://nginx.org/download/nginx-1.15.8.tar.gz

image.png

解压文件

tar xzvf nginx-1.15.8.tar.gz

image.png

进入nginx目录并编译执行安装文件

cd /usr/src/nginx-1.15.8

image.png

在/**opt创建一个nginx目录**

mkdir /opt/nginx

在/usr/src/nginx-1.15.8执行配置命令,将安装配置指向/opt/nginx

./configure --prefix=/opt/nginx

image.png

执行编译命令

cd /usr/src/nignx-1.15.8

make

执行安装命令

make install

进入/opt/nginx目录

cd /opt/nginx

ls

image.png

安装完成,删除/usr/src/nginx-1.15.8解压目录

rm -rf /usr/src/nginx-1.15.8

启动nginx

./opt/nginx/sbin/nginx

查看进程信息

ps -ef|grep nginx

image.png

重启nginx

./opt/nginx/sbin/nginx -s reload

停止nginx

./opt/nginx/sbin/nginx -s stop

./opt/nginx/sbin/nginx -s  quit

查验配置文件语法是否正确

./opt/nginx/sbin/nginx -

Nginx配置

查看nginx配置文件

nginx -t

image.png

或者

whereis nginx

image.png

我们知道,软件安装的系统配置通常都在etc目录下,所以我们直奔主题:

cd /etc/nginx

image.png

其中,我们看到有个nginx.conf.default文件,是用来干嘛的呢?

nginx.conf.default是nginx安装完成后生成的默认配置参考文件,可以当作默认配置的备份文件,真正生效的配置是nginx.conf.

我们去配置nginx.conf时可以参考着nginx.conf.default配置项进行配置**

nginx配置文件详解

cat /etc/nginx/nginx.conf

整体结构
|——-全局块 配置影响nginx全局的指令。
|————-events块 配置影响nginx服务器或与用户的网络连接
|————-http块 可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
|—————-upstream 配置负载服务器池
|—————-server块 配置虚拟主机的相关参数
|————————location块 配置请求的路由,以及各种页面的处理情况。

########### 每个指令必须有分号结束。#################
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;  #配置用户或用户组
worker_processes auto;  #worker进程数,默认为auto,建议与cpu核心数相同
error_log /var/log/nginx/error.log debug;  #指定日志路径,级别,nginx的日志级别:{debug|info|notice|warn|error|crit|alert|emerg}
pid /run/nginx.pid;  #指定nginx进程运行文件路径
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;  #包含其他的配置文件
#events块,配置影响nginx服务器或与用户的网络连接
events {
    #accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on,惊群现象:一个网路连接到来,多个睡眠的进程被同事叫醒,但只有一个进程能获得链接,这样会影响系统性能
    #multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    worker_connections 1024;  #每个worker进程的最大连接数
}
#http块,配置代理,缓存,日志定义等绝大多数功能和第三方配置
http {
    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  /var/log/nginx/access.log  main;  #服务日志存放位置及格式
    sendfile            on;  #指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件
    tcp_nopush          on;  
    tcp_nodelay         on;
    keepalive_timeout   65;  #连接超时时间
    types_hash_max_size 2048;
    include             /etc/nginx/mime.types;  #设定mime类型,类型由mime.type文件定义
    default_type        application/octet-stream;  #默认mime类型
    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;  #http块内引入其他配置

    #自定义服务器,跨越单机的限制,完成网络数据的接收、处理和转发 (负载均衡的关键)
    upstream mysvr {   
      server 127.0.0.1:7878;
      server 192.168.10.121:3333 backup;  #热备
    }

    #server块,配置虚拟主机的相关参数,一个http中可以有多个server。
    server {
        listen       80 default_server; #监听端口
        listen       [::]:80 default_server;
        server_name  _;  #监听地址
        root         /usr/share/nginx/html;  #站点根目录
        index index.html index.htm index.php;    #首页排序,站点首页
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;  #server块引入其他配置

        #location块,配置代理请求的路由,以及各种页面的处理情况
        location / {
            root   /xxx/application/tmp;  #拦截路由的根目录
            index  index.html index.htm;  #拦截路由的设置默认页
            proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
            deny 127.0.0.1;  #拒绝的ip
            allow 172.18.5.54; #允许的ip        
        }

        #404异常页面
        error_page 404 /404.html;
            location = /40x.html {
        }

        #500 502 503 504异常页面
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}

检查nginx配置文件语法是否正确

nginx -t

image.png

重启nginx

systemctl restart nginx.service

service nginx restart

关闭nginx

systemctl stop nginx.service

service nginx restart

测试访问示例


配置监听80及8080端口映射到/usr/share/nginx/html目录下的文件**

①修改配置文件,配置如下两个server:

vim /etc/nginx/nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
    worker_connections 1024;
}
http {
    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  /var/log/nginx/access.log  main;
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
    #监听80端口
    server {
        listen       80 default_server;
        #listen       [::]:80 default_server;
        server_name  _;
        #root         /usr/share/nginx/html;
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        #拦截路由 /
        location /{
           root /usr/share/nginx/html;
            index index.html index.html;
        }
        error_page 404 /404.html;
            location = /40x.html {
        }
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

   #监听8080端口
    server{
      listen 8080;
      #拦截路由 /
      location / {
           root /usr/share/nginx/html;
           index index.html index.html;
      }
    }
}

②重启nginx

systemctl restart nginx.service

③防火墙开放端口80及8080

firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=8080/tcp --permanent

重启防火墙

systemctl restart firewalld.service

查看防火墙开放端口

firewall-cmd --list-port

查看/usr/share/nginx/html目录下文件

ls /usr/share/nginx/html

image.png

④浏览器访问测试

访问http://服务器ip:80/

image.png

访问http://服务器ip:80/nginx-logo.png

image.png

访问http://服务器ip:8080/

image.png

至此,Nginx代理服务器搭建成功!★,°:.☆( ̄▽ ̄)/$:.°★

如有贻误,还请评论指正