C05S02-Nginx服务架设

一、Nginx

1. Nginx概述

Nginx是一个高并发、轻量级的Web服务软件。性能稳定性高,系统资源消耗率低。对HTTP的高并发处理能力高,单台物理服务器支持3~5万的并发量。在实际使用中,Nginx的并发量通常设置在2万左右。

  1. 静态页面处理能力

    Nginx的主要功能是处理静态的页面,包括文本、图片等。

  2. 动态页面处理能力

    动态页面的处理能力较差,一般是将动态请求转发到中间件,然后通过中间件将请求转发到后端进行处理。中间件是位于客户端和服务器之间的软件,主要用于处理客户端发出的请求和服务器返回的响应,常见的有PHP、Python等。

  3. 正向代理和反向代理

    正向代理是指通过代理的地址,访问目标地址。客户端将对服务端的请求先发送到代理服务,代理服务转发请求并返回响应给客户端,客户端是知道正向代理的存在。

    反向代理是客户端将请求直接发送给代理服务,代理会根据算法转发到服务端,以实现负载均衡的功能,客户端是不知道反向代理的存在。

  4. 支持SSL/TLS加密,支持HTTPS协议。

  5. 支持虚拟主机,在Nginx配置中可以设置多个域名。

  6. Nginx自带缓存机制,可以缓存静态文件。

  7. 自带日志文件,但Nginx没有日志分隔的功能,只记录直接的业务日志。启动日志、停止日志和错误日志不会记录在里面。

2. 同步和异步

同步指的是在执行某个任务时,必须等待这个任务完成后才能继续执行下一个任务。是一个可靠的序列,要么都执行成功,要么都执行失败。

异步是指在执行某个任务时,不用等待这个任务完成就可以执行其他的任务。一个任务完成依赖其他的任务,但只是通知其他任务开始执行,并不需要依赖任务的执行结果,是一个不可靠的序列。

Nginx运行快,就是因为采用了异步的处理方式。

3. 阻塞和非阻塞

阻塞是指在调用结果返回之前,当前的线程会被挂起,一直等待结果的返回。这个期间是无法执行其他的任务。

非阻塞不需要等待调用的结果,不能立刻得到执行结果并不会影响后续任务执行,线程可以继续执行其他的任务。

Nginx服务采用的就是非阻塞方式。

二、Nginx安装

1. 编译安装流程

  1. 关闭系统的防火墙开机自启动,以免其他网络无法访问相关程序。非必要步骤。

    ufw disable
    
  2. 安装程序的依赖环境。

    apt -y install libpcre3-dev zlib1g-dev libssl-dev build-essential
    
    • libpcre3-dev:这是 Perl 兼容正则表达式库(PCRE)的开发包。提供了开发库和头文件,用于在其他程序中使用 PCRE 库。

    • zlib1g-dev:这是 zlib 库的开发包。提供了开发库和头文件,用于在其他程序中使用 zlib 进行数据压缩和解压缩。

    • libssl-dev:这是 OpenSSL 库的开发包。提供了开发库和头文件,用于在其他程序中使用 OpenSSL 进行安全通信。

    • build-essential:这是一个元包,它自动安装编译 C 和 C++ 程序所需的基本工具和库,包括 gcc(GNU 编译器集合)、g++(GNU C++ 编译器)、make(构建工具)等。

  3. 创建程序的执行用户。

    useradd -M -s /sbin/nologin nginx
    
    • -M:不创建用户的家目录。
    • -s:设置用户的登录 shell。/sbin/nologin是一个特殊的shell,禁止用户登录。通常用于不需要交互式登录,只用于运行特定服务的用户。
    • nginx:创建的用户名。
  4. 软件包解压缩。

    tar -xf nginx-1.22.0.tar.gz
    
  5. 进入软件源码包,执行configure文件,配置程序的安装路径和执行用户,以及启动的组件。

    ./configure --prefix=/usr/local/nginx \
    --user=nginx \
    --group=nginx \
    --with-http_ssl_module \
    --with-http_v2_module \
    --with-http_realip_module \
    --with-http_stub_status_module \
    --with-http_gzip_static_module \
    --with-pcre \
    --with-stream \
    --with-stream_ssl_module \
    --with-stream_realip_module
    
  6. 编译并安装。

    make && make install
    
  7. 创建软链接,便于直接使用nginx命令来调用Nginx程序。

    ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
    
  8. 在安装目录下创建一个run目录,用于存放Nginx程序的PID文件。并修改安装目录的所有者和所有组。

    mkdir /usr/local/nginx/run
    
    chown -R nginx.nginx /usr/local/nginx
    
  9. 进入Nginx程序安装目录下的配置目录conf,修改配置文件nginx.conf,设置Nginx程序PID文件的位置。

    pid        /usr/local/nginx/run/nginx.pid;
    

    保存退出后,可执行下面的命令,查看配置是否存在问题。

    nginx -t
    
  10. 编写Nginx程序的系统服务。

    vim /lib/systemd/system/nginx.service
    

    在文件中写入以下内容:

    [Unit]
    Description=nginx - high performance web server
    Documentation=http://nginx.org/en/docs/
    After=network-online.target remote-fs.target nss-lookup.target
    Wants=network-online.target
    [Service]
    Type=forking
    PIDFile=/usr/local/nginx/run/nginx.pid
    #注意文件位置,如果不对 启动不了
    ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 
    #注意启动文件位置
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s TERM $MAINPID
    [Install]
    WantedBy=multi-user.target
    
  11. 启动Nginx服务。

    # 配置完服务文件后,重新加载系统服务
    systemctl daemon-reload
    
    # 设置Nginx服务开机自启动
    systemctl enable nginx
    
    # 启动Nginx服务
    systemctl start nginx # restart是重启
    
  12. 查看Nginx程序的PID。

    netstat -anutp | grep nginx
    
  13. 在本机浏览器中访问虚拟机的Nginx服务,IP为虚拟机的IP地址,端口为80,可不写。还可以编辑Nginx安装目录下html目录中的index.html文件,自定义页面显示内容。

2. Nginx主要目录

  • conf:Nginx配置文件目录。
  • logs:Nginx日志文件目录。
  • sbin:Nginx操作命令目录。
  • html:Nginx访问的Web页面。

3. Nginx主配置文件

Nginx服务的主配置文件是安装目录下的conf/nginx.conf文件。nginx.conf文件主要分为五大部分:全局模块、events模块、http模块、server模块和location模块

  • 全局模块:全局配置,全局有效。
  • events模块:主要配置Nginx服务的进程连接数。
  • http模块:配置代理、缓存、日志和第三方模块。
  • server模块:位于http模块中,主要用于配置虚拟主机相关参数。
  • location模块:位于server模块中,主要用于配置网站的URL。

3.1 全局模块

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid         /usr/local/nginx/run/nginx.pid;
  • user:Nginx服务的运行用户,注释掉则默认是自定义的程序用户。
  • worker_processes:工作进程数,一般不超过8。
  • pid /usr/local/nginx/run/nginx.pid:Nginx进程文件的存放位置。

3.2 events模块

events {
    worker_connections  1024;
}
  • worker_connections:配置每个工作进程的最大连接数。

  • Nginx并发量=工作进程数*工作进程连接数

  • Linux系统会限制每个进程的最大连接数,因此要修改Nginx的并发,就还要修改系统的限制。

    • 使用ulimit -a查看系统允许的进程最大链接数。

    • 编辑/etc/security/limits.conf文件实现永久修改。基本格式如下所示:

      nginx hard nofile 30000
      

      nginx:用户或用户组。

      hard:硬限制,还可以使用soft设置软限制。

      nofile:限制项目,nofile表示最大连接数。

      30000:设置的具体数量。

3.3 http模块

http {
    # 文件扩展名和文件类型的映射表
    include       mime.types;
    # Nginx支持的默认文件类型
    default_type  application/octet-stream;

    # Nginx的日志格式
    #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        on;
    # 发送数据包前先缓存数据
    #tcp_nopush     on;

    # 连接保持时间
    #keepalive_timeout  0;
    keepalive_timeout  65;

    # 是否对响应数据进行压缩
    #gzip  on;

    # server模块配置
    server {
        # 配置监听端口
        listen       80;
        # 配置站点域名
        server_name  localhost;
        # 配置页面的字符集
        #charset koi8-r;
        # 配置日志文件位置
        #access_log  logs/host.access.log  main;

        # 匹配URL
        location / {
            # 匹配文件系统的根目录,相对路径是相对Nginx服务的安装目录
            root   html;
            # 指定默认的首页文件
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   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常见配置

1. 配置访问状态统计

  1. 在配置文件中新增一个location模块。

    location /status {
        stub_status on;
        access_log  off;
    }
    
    • stub_status:是否开启Nginx的状态统计功能。

    • access_log:是否关闭日志功能。

  2. 重启Nginx访问,在浏览器中访问的URL。

2. 配置用户授权服务

  1. 下载apache2软件包。

    apt -y install apache2
    
  2. 使用htpasswd命令设置访问网页的用户和密码,并写入指定文件。

    htpasswd -c /usr/local/nginx/passwd.db test
    
  3. 修改密码文件的用户和权限。

    chown nginx /usr/local/nginx/passwd.db
    chmod 400 /usr/local/nginx/passwd.db
    
  4. 在配置文件中新增授权访问功能。

    location / {
        root   html;
        index  index.html index.htm;
        auth_basic "secret";
        auth_basic_user_file /usr/local/nginx/passwd.db;
    }
    
    • auth_basic “secret”:开启认证功能,用户访问页面时需要进行用户认证。
    • auth_basic_user_file:设置用于认证的密码文件。
  5. 重启Nginx访问,在浏览器中访问的URL。

3. 配置基于域名的虚拟主机

  1. 编辑nginx.conf配置文件,在文件中新增一个server模块。

    server {
        listen 80;
        server_name www.test1.com;
        charset  utf-8;
        access_log logs/test1.com.access.log;
    
        location / {
            root html;
            index index.html;
        }
    }
    
    server {
        listen 80;
        server_name www.test2.com;
        charset  utf-8;
        access_log logs/test2.com.access.log;
    
        location / {
            root /var/www/html;
            index index.html;
        }
    }
    
  2. 检查Nginx配置文件是否存在语法问题,重启Nginx服务。

    nginx -t
    
    systemctl restart nginx
    
  3. 在指定的两个index.html文件中,分别写入以下内容。

    # /usr/local/nginx/html/index.html
    这里是test1。
    
    # /var/www/html/index.html
    这里是test2。
    
  4. 配置/etc/hosts文件。

    192.168.1.128 www.test1.com www.test2.com
    
  5. 在浏览器访问两个域名,查看内容。

4. 配置基于IP的虚拟主机

  1. 编辑nginx.conf配置文件,在listen部分写上详细的IP地址和端口。

    server {
        listen 192.168.1.128:80;
        server_name localhost;
        charset  utf-8;
        access_log logs/test1.com.access.log;
    
        location / {
            root html;
            index index.html;
        }
    }
    
    server {
        listen 192.168.1.150:80;
        server_name localhost;
        charset  utf-8;
        access_log logs/test2.com.access.log;
    
        location / {
            root /var/www/html;
            index index.html;
        }
    }
    
  2. 检查Nginx配置文件是否存在语法问题,重启Nginx服务。

    nginx -t
    
    systemctl restart nginx
    
  3. 在指定的两个index.html文件中,分别写入以下内容。

    # /usr/local/nginx/html/index.html
    这里是test1。
    
    # /var/www/html/index.html
    这里是test2。
    
  4. 配置虚拟网卡。

    ifconfig ens33:1 192.168.1.150
    
  5. 在浏览器访问两个IP,查看内容。

5. 配置基于端口的虚拟主机

  1. 编辑nginx.conf配置文件,两个server模块的监听端口分别设置为8011、8022。

    server {
        listen 8011;
        server_name localhost;
        charset  utf-8;
        access_log logs/test1.com.access.log;
    
        location / {
            root html;
            index index.html;
        }
    }
    
    server {
        listen 8022;
        server_name localhost;
        charset  utf-8;
        access_log logs/test2.com.access.log;
    
        location / {
            root /var/www/html;
            index index.html;
        }
    }
    
  2. 检查Nginx配置文件是否存在语法问题,重启Nginx服务。

    nginx -t
    
    systemctl restart nginx
    
  3. 在指定的两个index.html文件中,分别写入以下内容。

    # /usr/local/nginx/html/index.html
    这里是test1。
    
    # /var/www/html/index.html
    这里是test2。
    
  4. 在浏览器访问Nginx所在主机的8011和8022端口,查看显示内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值