Nginx学习记录

声明:因为是我的学习过程,查阅了很多大佬的文章,大部分内容是复制过来的。若有侵权、冒犯,请与我联系,我会第一时间删除。请大家悉知!!!

一、概念

Nginx是一款轻量级的Web 服务器、反向代理服务器、电子邮件(IMAP/POP3)代理服务器。中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

特点:占用内存少,并发能力强,cpu、内存等资源消耗非常低,运行非常稳定。

二、名词解释

1、正向代理

正向代理是在客户端部署的。以VPN举例,正常访问国外服务器是访问不了的,但是你给你的电脑装了代理服务器,代理服务器可以去访问香港的服务器,香港服务器再去访问国外的服务器,然后再一次返回回来,这样你就可以访问国外服务器,这就是正向代理。

2、反向代理

反向代理是在服务器端部署的。以百度为例,它背后是有很多台服务器的,比如广州的深证的北京的,但是你访问的永远都是www.baidu.com,这种代理服务器端的就叫反向代理。

3、负载均衡

Nginx提供的负载均衡有两种:内置策略(轮询、加权轮询等))和扩展策略(任意操作)。

轮询:(依次循环)

加权轮询:(权重越高访问越高,从而保障服务器的性能最大化)

4、动静分离

        在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静志文件。让动志网站里的动志网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静志资源的特点将其做缓存操作。提高资源响应的速度。

三、Nginx部署

官网:nginx: download

1、Nginx安装--Windows

下载并解压至全英文目录下,打开nginx.exe 文件所在目录,在路径里输入cmd。

#这时候不建议使用win+r,cmd

#注意:不要双击nginx.exe ,闪一下就没了

2、Nginx安装--Linux

为什么选择编译安装,因为使用rpm安装的Nginx无法增加指定功能模块,而自己编译安装的话,可以在安装时指定需要的功能模块,比如ssl模块功能。

本章节只安装Nginx的基础模块,实现简单的WEB页面测试,如需要更多模块或在生产环境中使用,在编译安装时添加相应的功能模块即可。

--with-http_stub_status_module     ------运行监控模块

--with-http_ssl_module                   ------https访问

--with-pcre                                      ------rewrite模块使用

--with-http_v2_module                   ------http v2模块使用

--with-mail=dynamic                       -----邮件模块

--with-mail_ssl_module                  ------邮件ssl模块

--with-stream=dynamic                  -----tcp转发模块

--with-stream_ssl_module              -----tcp加密转发

​(1)关闭防火墙和SELinux;

(2)配置阿里的yum源:
(原因:系统默认的yum源的国外的,下载慢;这里配置国内源,下载快,网络稳定。)
[root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

​(3)安装依赖包
[root@localhost ~]# yum install gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel wget -y

​​(4)下载软件包,这里我使用的是Nginx-1.22.1b版本
[root@localhost ~]# wget -c http://nginx.org/download/nginx-1.22.1.tar.gz

(5)编译安装:
#这里全部使用默认选项:
#解压
[root@localhost ~]# tar -zxf nginx-1.22.1.tar.gz -C /usr/local

#编译安装:(编译时添加了http访问模块功能)
[root@localhost ~]# cd /usr/local/nginx-1.22.1
[root@localhost nginx-1.22.1]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
[root@localhost nginx-1.22.1]# make
[root@localhost nginx-1.22.1]# make install

#安装完成后删除源码目录:
[root@localhost nginx-1.22.1]# cd /root
[root@localhost ~]# rm -rf /usr/local/nginx-1.22.1

#创建启动用户
[root@localhost ~]# useradd -u 8000 -s /sbin/nologin nginx

#修改配置文件
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
#在配置文件中修改启动Nginx服务使用的用户名
#将:user nobody;
#改为:user nginx nginx;

#启动nginx
[root@localhost ~]# /usr/local/nginx/sbin/nginx

#其它命令操作,需要时可使用,本文只是安装不需要执行以下2步操作
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s stop

#测试是否搭建成功:通过网页测试,地址栏输入服务器地址能得到“Welcome to nginx!”

安装完成之后,需要知道的几个关键路径和文件:

3、Nginx维护--Linux 
#一般的Nginx的启动为:
[root@localhost ~]# /usr/local/nginx/sbin/nginx
[root@localhost ~]# ps -ef | grep nginx 
root      12201   1194  0 23:13 pts/0    00:00:00 grep --color=auto nginx
root     112802      1  0 22:47 ?        00:00:00 nginx: master process nginx
nginx    112803 112802  0 22:47 ?        00:00:00 nginx: worker process
[root@localhost ~]# 




#为使用方便,可为其创建软连接,在任何路径下都能执行Nginx操作
[root@localhost ~]# ln -s /usr/local/nginx/sbin/nginx /sbin/nginx
[root@localhost ~]# nginx
[root@localhost ~]# ps -ef | grep nginx 
root      14440      1  0 21:21 ?        00:00:00 nginx: master process nginx
nginx     14441  14440  0 21:21 ?        00:00:00 nginx: worker process
root      14788   1194  0 21:21 pts/0    00:00:00 grep --color=auto nginx
[root@localhost ~]# 
#Nginx由master进程和worker进程组成,master只有一个,worker进程可以有多个。




#Nginx的启动(这里默认的配置文件是/usr/local/nginx/conf/nginx.conf)
[root@localhost ~]# nginx
或者
[root@localhost ~]# nginx –c /usr/local/nginx/conf/nginx.conf
#实际使用中可能有多个配置文件,需指定配置文件启动。
#启动操作-c参数指定了要加载的Nginx配置文件路径。




#Nginx的停止
通过杀进程方式停止,master进程和worker进程都需要kill掉
[root@localhost ~]# nginx
[root@localhost ~]# ps -ef | grep nginx 
root      14440      1  0 21:21 ?        00:00:00 nginx: master process nginx
nginx     14441  14440  0 21:21 ?        00:00:00 nginx: worker process
root      14788   1194  0 21:21 pts/0    00:00:00 grep --color=auto nginx
[root@localhost ~]# kill -9 14440
[root@localhost ~]# kill -9 14441
[root@localhost ~]# ps -ef | grep nginx 
root      27291   1194  0 21:32 pts/0    00:00:00 grep --color=auto nginx
[root@localhost ~]# 
#优雅停止nginx命令,等最后一次交互执行完毕再停止
[root@localhost ~]# nginx
[root@localhost ~]# ps -ef | grep nginx 
root     104547      1  0 22:39 ?        00:00:00 nginx: master process nginx
nginx    104548 104547  0 22:39 ?        00:00:00 nginx: worker process
root     104564   1194  0 22:39 pts/0    00:00:00 grep --color=auto nginx
[root@localhost ~]# nginx -s quit
[root@localhost ~]# ps -ef | grep nginx 
root     104904   1194  0 22:40 pts/0    00:00:00 grep --color=auto nginx
[root@localhost ~]# 




#重启nginx命令
[root@localhost ~]# nginx -s reload




#检查Nginx配置文件是否有问题
#ok和successful正常
[root@localhost ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# 




#查看nginx版本信息
#查看nginx详细版本信息,注意是大写V
[root@localhost ~]# nginx -v
nginx version: nginx/1.22.1
[root@localhost ~]# 
[root@localhost ~]# nginx -V
nginx version: nginx/1.22.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
[root@localhost ~]# 

Nginx配置文件的详细学习:

1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。

5、location块:配置请求的路由,以及各种页面的处理情况。


[root@localhost ~]# cat /usr/local/nginx/conf/nginx.conf

user nginx nginx; #运行nginx的默认账号
worker_processes  1; #nginx进程数,一般设置成CPU总核心数

#error_log  logs/error.log; #错误日志路径
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid; #pid(进程文件)路径

#事件区块

#单个进程最大链接数(最大连接数=连接数*进程数)

#根据硬件调整,尽量大,但别把CPU跑到100%就行。每个worker进程最大连接数,小于等于系统的最大打开文件数

events {
    worker_connections  1024;
}

#设定http服务器,利用它的反向代理功能提供负载均衡支持

http {
    include       mime.types; #导入外部文件mime.types,将所有types提取为文件,然后导入到nginx配置文件中
    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指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设置为on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载,注意:如果图片显示不正常把这个改成off
#sendfile指令指定nginx是否调用sendfile函数(zero copy方式)来输出文件,对于普通应用,必须设为on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0; #连接超时时间
    keepalive_timeout  65;

    #gzip  on;

#第一个server区块开始,表示一个独立的虚拟主机站点

    server {
        listen       80; #提供服务的端口,默认为80

        server_name  localhost; #提供服务的域名主机名

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

#对 “/” 启动反向代理,第一个location区块开始

        location / {
            root   html; #服务默认启动目录,可以改成指定的目录位置
            index  index.html index.htm; #默认的首页文件,多个用空格分开
        }

#错误页面路由

        #error_page  404              /404.html; #出现对应的http状态码是,使用50x.html回应客户

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

# location区块开始,访问 /50x.html
        location = /50x.html {
            root   html; # 指定对应的站点目录为html
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

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


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

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

}
 

至此,Nginx的基础知识你已经掌握了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值