《前端运维》二、Nginx–1基本概念及安装

一、Nginx基本概念简单来说,Nginx就是一个代理服务器,什么是代理服务器呢?也就是当我们访问服务器的时候,请求不会直接请求到服务器,中间会有个代理,代理会预先于服务器处理这些请求,最后由代理决

大家好,又见面了,我是你们的朋友全栈君。

一、Nginx基本概念

  简单来说,Nginx就是一个代理服务器,什么是代理服务器呢?也就是当我们访问服务器的时候,请求不会直接请求到服务器,中间会有个代理,代理会预先于服务器处理这些请求,最后由代理决定是否要把请求提交至服务器。

  那么,Nginx解决了什么问题?直接访问服务器不行么?为啥要费事的走一遍代理呢?

  Nginx的优势主要有:

  1. 高并发、高性能
  2. 可扩展性好
  3. 高可靠性
  4. 热部署
  5. 开源许可

  这样,大家就可以理解,为什么要使用Nginx了吧,主要就是为了解决传统服务器的一些局限性。Nginx的最常见的使用场景大致有以下几点:

  1. 静态资源服务器
  2. 反向代理服务
  3. API接口服务

  下面,我们来学习下Nginx的基本架构。首先,Nginx是十分轻量的,源代码只包含核心模块。其他非核心模块都是通过模块实现,可以自由选择。然后,Nginx采用的是多进程(单线程)和多路IO复用。我们来看下具体的内容:

1、Nginx工作流程

  首先,Nginx在启动后,会有一个master进程和多个互相独立的worker进程。在接收到来自外界的信号时,向各worker进程发送信号,每个进程都有可能来处理该信号。master进程能监控worker进程的运行状态,当worker进程退出或出现异常后,会自动启动新的worker进程。

2、IO多路复用

  多个文件描述符的IO操作都能在一线程里并发交替顺序完成,复用线程。

3、CPU亲和

  把CPU内核和nginx的工作进程绑定在一起,让每个worker进程固定在一个CPU上执行,从而减少CPU的切换并提高缓存命中率,提高性能。

4、sendfile零拷贝传输模式

二、安装Nginx

  首先,假设你看了我之前写的Linux部分,那么请把服务器重置一下,我们从0、从一个干净的服务器环境开始。

  其次,在安装Nginx,我们要确认关闭防火墙和停用selinux。其实,不关闭防火墙也是可以的,但是需要开放端口,这个我们后面会学习,所以,现在为了简便,直接关闭防火墙就好。另外,selinux是安全增强型linux,是Linux的一个内核模块,也是Linux的一个安全子系统,selinux最主要的作用就是最大限度地减小系统中服务进程可访问的资源,即最小权限原则。

1、关闭防火墙与selinux

  1. 关闭防火墙命令
    • systemctl stop firewalld.service,停用防火墙。
    • systemctl disable firewalld.service,永久关闭防火墙。
    • systemctl status firewalld,查看防火墙状态。
  2. 停用selinux
    • getenforce 或者/usr/sbin/sestatus -v,检查selinux状态。
    • setenforce 0,临时关闭。
    • 编辑/etc/selinux/config文件,把SELINUX=enforcing 改为SELINUX=disabled,永久关闭。

  然后,我们需要安装依赖模块,其实在学习Linux的部分,有讲到这些,这里也再简单重复一遍。

yum  -y install gcc gcc-c++ autoconf pcre pcre-devel make automake openssl openssl-devel

  我们来简单解释下,这些模块都是做什么用的:

  1. gcc,gcc是指整个gcc的这一套工具集合,它分为gcc前端和gcc后端(我个人理解为gcc外壳和gcc引擎),gcc前端对应各种特定语言(如c++/go等)的处理(对c++/go等特定语言进行对应的语法检查, 将c++/go等语言的代码转化为c代码等),gcc后端对应把前端的c代码转为跟你的电脑硬件相关的汇编或机器码。
  2. gcc-c++,就软件程序包而言,gcc.rpm就是那个gcc后端,而gcc-c++.rpm就是针对c++这个特定语言的gcc前端。
  3. autoconf,是一个软件包,以适应多种Unix类系统的shell脚本的工具。
  4. pcre,Perl Compatible Regular Expressions 是一个Perl库,包括 perl 兼容的正则表达式库。
  5. pcre-devel,主要是供开发用,包含头文件和链接库。
  6. make,常指一条计算机指令,是在安装有GNU Make的计算机上的可执行指令。该指令是读入一个名为makefile的文件,然后执行这个文件中指定的指令。
  7. automake,可以用来帮助我们自动地生成符合自由软件惯例的Makefile。
  8. wget,是一个从网络上自动下载文件的自由工具,支持通过 HTTP、HTTPS、FTP 三个最常见的 TCP/IP协议 下载,并可以使用 HTTP 代理。
  9. httpd-tools,apace压力测试。

2、安装Nginx

  首先,跟其他软件的版本分类类似,Nginx也分为:

  • Mainline version 开发版
  • Stable version 稳定版
  • Legacy versions 历史版本

  这几种版本。下载地址:http://nginx.org/en/download.html。以及通过Nginx下载的方式:http://nginx.org/en/linux_packages.html#stable。

  那么在CentOS下可以通过YUM来安装Nginx,通过vim,编辑/etc/yum.repos.d/nginx.repo文件:

vi /etc/yum.repos.d/nginx.repo

  在其中填写如下内容:

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

  然后,安装Nginx:

yum install nginx -y //安装nginx
nginx -v //查看安装的版本
nginx -V //查看编译时的参数

  好了,到这里,我们基本了解了Nginx是什么,能做什么,以及成功安装了Nginx。下一篇,我们来具体的学习一下Nginx的一些核心内容。

三、Nginx目录

  我们可以通过rpm -ql nginx命令,来查看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/.build-id
/usr/lib/.build-id/2d
/usr/lib/.build-id/2d/da6018ae12edb856ad3d2cf61bf586b6b4873c
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx/modules
/usr/sbin/nginx
/usr/share/doc/nginx
/usr/share/doc/nginx/CHANGES
/usr/share/doc/nginx/README
/usr/share/doc/nginx/README.dynamic
/usr/share/licenses/nginx
/usr/share/licenses/nginx/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/indent/nginx.vim
/usr/share/vim/vimfiles/syntax/nginx.vim
/var/lib/nginx
/var/lib/nginx/tmp
/var/log/nginx

  差不多有这么多,我们会调其中部分必要的进行说明,其他的大家可以自行查询哦。

  1. /etc/logrotate.d/nginx,日志切割文件,为了防止日志体积过大,读写困难,所以会对日志进行切割。
  2. /etc/nginx/nginx.conf,核心配置文件。
  3. /etc/nginx/conf.d/default.conf,默认http服务器配置文件。
  4. /etc/nginx/modules,最基本的共享库和内核模块。
  5. /usr/share/doc/nginx-1.14.2,帮助文档。
  6. /usr/share/doc/nginx-1.14.0/COPYRIGHT,版权声明。
  7. /usr/share/man/man8/nginx.8.gz,手册。
  8. /var/cache/nginx,nginx缓存目录。
  9. /var/log/nginx,nginx日志目录。
  10. /usr/sbin/nginx,可执行命令,nginx服务启动管理的可执行文件。
  11. /usr/sbin/nginx-debug,调试执行可执行文件。

1)nginx核心配置文件

  上面的列表中,我们看到nginx核心的配置文件,我们一起来看下其中的内容:

user nginx; # 启动nginx用户
worker_processes auto; # work进程数,一般和cpu核数相等
error_log /var/log/nginx/error.log; # 错误日志路径
pid /run/nginx.pid; # 进程ID写入的文件

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; # 保持连接的超时时间 65秒
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types; # 引入额外的配置文件,包含mime文件
    default_type        application/octet-stream; # 默认二进制类型,若在mime中找不到的话,就返回该类型,

    include /etc/nginx/conf.d/*.conf; # 

    server { # 最核心的配置文件,用来作为服务配置的
        listen       80 default_server; # 监听端口
        listen       [::]:80 default_server;
        server_name  _; # 服务名称,或者是域名,或者是ip
        root         /usr/share/nginx/html;

        include /etc/nginx/default.d/*.conf;

        location / { # 重点中的重点,路径,“/”匹配所有的文件
        # root /usr/share/nginx/html # 文件根路径,根目录
        # index   index.html  index.htm # 索引文件,默认文件
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}

  上面,就是nginx核心配置文件的内容,我都加上了注释,并删除了原有的部分注释。理解起来并不难。

ps:

  1. 如果你发现服务器启动nginx后,通过浏览器ip地址访问但是访问不到nginx服务器,可能是因为你的服务器没开发80端口,需要阿里云或者你的云服务器上配置80端口,具体方法请自行百度。
  2. reload 和 restart 是有区别的。restart会粗暴的断开与客户端的连接。reload会在下一次服务接入时使用新的配置,不会终端当前处理中的旧配置请求。
  3. nginx -t,可以校验nginx配置文件语法是否错误。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124355.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • maven的资源过滤filters[通俗易懂]

    maven的资源过滤filters[通俗易懂]maven的资源过滤maven的过滤资源需要结合maven的2个定义才能实现,分别是:profile resources下面分开来做介绍。profileprofile可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。需要掌握profile的定义以及…

    2022年5月11日
    42
  • 线程和进程有什么区别(简单介绍)[通俗易懂]

    线程和进程有什么区别(简单介绍)[通俗易懂] 线程和进程有什么区别(简单介绍) 简单介绍一、线程的基本概念  线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。   …

    2022年7月15日
    11
  • 放松解压电影_最新电影下载

    放松解压电影_最新电影下载经典高清电影合集170GBT种子下载点击文件名下载经典高清电影合集170GBT种子.torrent下载方法经典高清电影合集详情见目录:1.杀手472.这个杀手不太冷3.放牛班的春天

    2022年8月4日
    11
  • 关于 lockfree 算法[通俗易懂]

    关于 lockfree 算法[通俗易懂]lockfree的本质是乐观锁。也就是说,它假设多数情况下,别人不会改变。一个通用的lockfree算法可描述如下: lockfree_modify(DataT*data){   for(;;)   {       Saveoldstateofdatatoalocalvariable;       domodify;       lock{           

    2022年7月19日
    19
  • Java的finalize方法干什么_Java finalize

    Java的finalize方法干什么_Java finalize我们通常用构造器来创建对象,而Finalize正好相反,构造方法执行对象的初始化操作,finalize方法执行对象的销毁操作.那我们什么时候需要使用finalize方法呢,我们都知道Java里垃圾回收器可以回收对象使用的内存空间,但是对象可能会持有很多资源比如Socket、文件句柄等,垃圾收集器无法回收这些资源,因此你需要使用finalize方法帮助GC回收这些资源,比如关闭打开的文件或者网元资源,删除临时文件等.一个例子Object类是所有类的父类,如果你去查看java.lang.Object类

    2022年9月19日
    2
  • java二维数组输入_java 二维数组的输入输出问题[通俗易懂]

    java二维数组输入_java 二维数组的输入输出问题[通俗易懂]java二维数组的输入输出问题有一个二维数组里面包含了很大的数字。我要把它通过输出流存储在.dat文件中然后在另一个程序中把这些信息读取出来,并且存储在另外一个二维数组中。请问该怎么办?这个数组如下:intmapl[][]={{0,0,0,0,148,149,149,149,149,149,149,149,149,149,178,0,0,0,0,0,…

    2022年5月8日
    121

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号