当前位置: 首页 > news >正文

Nginx网站服务

目录

 

一、Nginx简介

概述:

Nginx和Apache的优缺点比较

nginx相对于apache的优点:

apache相对于nginx的优点

Nginx web网站服务应用

二、Nginx编译安装步骤详解

1.关闭防火墙,安装依赖关系包

2.新建用户 和组便于管理

3.编译安装

4.做软连接,方便系统识别nginx命令

5.检查、启动、重启、停止 nginx服务

6.查看nginx版本信息

三、Nginx配置文件

3.1添加 Nginx 系统服务

3.2Nginx主配置文件

3.3全局配置

3.4I/O事件配置

 3.5http配置

3.6基于域名的nginx 虚拟主机

3.7基于IP地址

3.8基于端口


一、Nginx简介

概述:

  • 高性能的HTTP和反向代理服务器。

  • 轻量级的高性能的web服务器/反向代理服务器/电子邮件(IMAP/POP3)代理服务器

  • 单台物理服务器可支持2万/3万个并发请求

  • 基于事件的web服务器,apache基于流程的web服务器

Nginx和Apache的优缺点比较

都用80端口,启动其中一个再启动另一个会失败

nginx相对于apache的优点:

  • 轻量级,同样起web服务,比apache占用更少的内存及资源

  • 抗并发,nginx处理请求是异步非阻塞的,而apache是阻塞型的在高并发下,nginx能保持低资源低消耗高性能

  • 高度模块化的设计,编写模块相对简单

  • 处理请求是异步非阻塞,apache是同步阻塞型

  • 可以多个连接对应一个进程,apache一个连接对应一个进程

apache相对于nginx的优点

  • 模块多,基本想到的都可以找到

  • 少bug, nginx的bug相对较多

  • 超稳定

Nginx web网站服务应用

  • 轻量级:系统资源消耗较少
  • 高性能:抗并发能力强,一般可处理2-3万并发连接数,做多理论上可支持5万并发
  • 稳定性高:宕机概率小

常用使用场景

  • web网站服务
  • 虚拟主机(基于IP、端口、域名)
  • 反向代理

二、Nginx编译安装步骤详解

1.关闭防火墙,安装依赖关系包

1. #关闭防火墙
systemctl stop firewalld
setenforce 0
 
2. #安装依赖关系包
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

2.新建用户 和组便于管理

        Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限

useradd -M -s /sbin/nologin nginx

3.编译安装

#切换至opt目录,将压缩包传进来
[root@localhost opt]#cd /opt
[root@localhost opt]#ls
nginx-1.12.0.tar.gz
 
#解压文件
[root@localhost opt]#tar -zxf nginx-1.12.0.tar.gz 
[root@localhost opt]#ls
nginx-1.12.0  nginx-1.12.0.tar.gz
 
#切换至解压后的文件夹编译
[root@localhost nginx-1.12.0]#
./configure \

#指定nginx的安装路径
> --prefix=/usr/local/nginx \     

#指定用户名                      
> --user=nginx \

#指定组名
> --group=nginx \

#启用 http_stub_status_module 模块以支持状态统计
> --with-http_stub_status_module
 
make && make install

4.做软连接,方便系统识别nginx命令

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

5.检查、启动、重启、停止 nginx服务

//检查配置文件是否配置正确

nginx -t         

                      

//启动
nginx

//停止

cat /usr/local/nginx/logs/nginx.pid          查看nginx的PID号

kill -3 <PID号>
kill -s QUIT <PID号>
killall -3 nginx
killall -s QUIT nginx

//重载

kill -1 <PID号>
kill -s HUP <PID号>
killall -1 nginx
killall -s HUP nginx

//日志分割,重新打开一个空的日志文件,后续产生的日志将写入这里

kill -USR1 <PID号>

//平滑升级

kill -USR2 <PID号>

6.查看nginx版本信息

nginx -v

三、Nginx配置文件

3.1添加 Nginx 系统服务

法一:脚本

vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: - 99 20
#description:Nginx Service Control Script
COM="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
  $COM
;;

stop)
  kill -s QUIT $(cat $PID)
;;

restart)
  $0 stop
  $0 start
;;

reload)
  kill -s HUP $(cat $PID)
;;

*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1

esac
exit 0

//在脚本外执行

chmod +x /etc/init.d/nginx
chkconfig --add nginx	

//添加为系统服务
systemctl stop nginx
systemctl start nginx

法二: 将nginx命令加入服务

vim /lib/systemd/system/nginx.service

[Unit]编写结束后

chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

 [Unit]:服务的说明
Description:描述服务
After:依赖,当依赖的服务启动之后再启动自定义的服务

[Service]服务运行参数的设置
Type=forking是后台运行的形式,使用此启动类型应同时指定PIDFile=,以便systemd能够跟踪服务的主进程。
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:启动、重启、停止命令全部要求使用绝对路径

[Install]服务安装的相关设置,可设置为多用户

3.2Nginx主配置文件

vim /usr/local/nginx/conf/nginx.conf

3.3全局配置

#user nobody;                         #运行用户,若编译时未指定则默认为 nobody
worker_processes 1;               #工作进程数量,一般设置为和 CPU 核数一样
#error_log logs/error.log;         #错误日志文件的位置
#pid logs/nginx.pid;                  #PID 文件的位置

3.4I/O事件配置

events {
    use epoll;                            #添加一行,使用 epoll 模型以提高性能,2.6 以上版本建议使用
    worker_connections  4096;   #每个进程处理4096个连接
}

        epoll(socket描述符)是Linux内核]为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率

        若工作进程数为 4,每个进程处理 2000个连接,则允许 Nginx 正常提供服务的连接数 为8000,具体还要看服务器硬件、网络带宽等物理条件的性能表现。

        要想提高每个进程的连接数需执行"ulimit -n 65535"命令临时修改本地每个进程可以同时打开的最大文件数。

        在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制

        可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制

 临时修改本地每个进程可以同时打开的最大文件数

ulimit -n 5000

再次查看

 3.5http配置

http {
##文件扩展名与文件类型映射表
    include       mime.types;

##默认文件类型
    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        on;
       ##此选项允许或禁止使用socke的TCP_CORK的选项(发送数据包前先缓存数据),此选项仅在使 用sendfile的时候使用
    #tcp_nopush     on;

##连接保持超时时间,单位是秒
    #keepalive_timeout  0;
    keepalive_timeout  65;

##gzip模块设置,设置是否开启gzip压缩输出
    #gzip  on;

##Web 服务的监听配置

server {
##监听地址及端口  端口前不加ip地址,默认监听全部
    listen 80; 
##站点域名,可以有多个,用空格隔开
    server_name www.xc.com;

##网页的默认字符集
    charset utf-8;

##根目录配置
    location / {
    
##网站根目录的位置/usr/local/nginx/html   root代表根目录
        root html;
    
##默认首页文件名
        index index.html index.htm;
    }
 

##内部错误的反馈页面
    error_page 500 502 503 504 /50x.html;
    ##错误页面配置
    location = /50x.html {
        root html;
    }
}
}

3.6基于域名的nginx 虚拟主机

为虚拟主机提供域名解析

  • 配置DNS

  • 修改/etc/hosts文件

vim /etc/hosts

 为虚拟主机准备网页文档

#创建网页目录
mkdir -p /var/www/html/abc
mkdir -p /var/www/html/def
 
#编写简易首页html文件
echo "<h1>welcome to www.abc.com</h1>" > /var/www/html/abc/index.html
echo "<h1>welcome to www.def.com</h1>" > /var/www/html/def/index.html

修改nginx配置文件

 检查语法并重启,访问测试

nginx -t

systemctl restart nginx.service

3.7基于IP地址

添加网络接口

 修改nginx配置文件

 

 检查语法并重启,访问测试

nginx -t

systemctl restart nginx.service

3.8基于端口

修改配置文件中监听端口

 检查语法并重启,访问测试

相关文章:

  • 6.RGB转YCbcr
  • 增强现实(AR)的开发工具
  • STM32CubeMX学习笔记28---FreeRTOS软件定时器
  • 2014年认证杯SPSSPRO杯数学建模B题(第二阶段)位图的处理算法全过程文档及程序
  • Docker部署MinIO对象存储服务
  • 原型链-(前端面试 2024 版)
  • 请求包的大小会影响Redis每秒处理请求数量
  • 水电表远程集中抄表管理系统
  • SpringCache缓存专题
  • 前端-Vue3递归组件自定义Tree
  • DAY12_VUE基本用法详细版
  • Delay/disruption tolerant networking (DTN) 与deep-space communications中的数据存储问题
  • Python游戏嗷大喵快跑设计
  • nginx负载均衡高可用部署
  • 【附源码】计算机毕业设计SSM怦然心动网上服装商城
  • YOLOv5实现佩戴安全帽检测和识别(含佩戴安全帽数据集+训练代码)
  • 【以太网硬件十六】双绞线有哪些种类?
  • 从零开始配置tensorflow深度学习环境(含cuda以及其他依赖)
  • 模型机的组合逻辑控制器
  • 私域流量和公域流量有何区别?为什么要打造自己的私域流量?
  • Python中的图像调整和裁剪工具
  • 基于单片机的智能照明系统
  • Visual Studio扩展插件
  • 12.MongoDB系列之副本集管理
  • 【初学者入门C语言】之编译预处理(十)
  • 【JavaWeb】之Maven
  • 牛客网专项练习30天Pytnon篇第25天
  • 【RPA前置知识】 整理并总结 Assign 和 AssignT 类
  • SpringBoot整合RabbitMq实现ACK机制--消息回退机制--消息确认机制
  • 关于“八音盒自定义弹奏”的一些想法
  • linux学习(青少年学Linux)
  • 从此刻开始走进HTML的大门!!!