利用Nginx在服务器上部署你的第一个静态页面

文章目录

序言

首先我们先来认识一下什么是Nginx源码 官网

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

  • Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。
  • 其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。其稳定性、功能集、示例配置文件和低系统资源的消耗让他后来居上,在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。
  • Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。
  • Nginx支持热部署,启动简单,可以做到7*24不间断运行。几个月都不需要重新启动。

Nginx常用功能

1. 反向代理

作为开发者,大家可能已经或多或少都接触过Nginx或者代理,反向代理这些名词,而反向代理正是Nginx的一个主要功能,先来两张图观察一些代理在网络中的位置.

简洁的说:正向代理就是隐藏客户端 ,而反向代理是隐藏服务器

  1. 正向代理是客户端发送请求后通过代理服务器访问目标服务器,代理服务器代表客户端发送请求并将响应返回给客户端。正向代理隐藏了客户端的真实身份和位置信息,为客户端提供代理访问互联网的功能平时我们会有访问GitHub等网站的功能,但是直接使用国内的服务器无法访问,或访问速度慢,此时就可以通过一个代理服务器帮助我们访问,对于目标服务器来说,收到了代理服务器的请求而隐藏了真实客户端
  2. 反向代理是位于目标服务器和客户端之间的代理服务器,它代表服务器接收客户端的请求并将请求转发到真正的目标服务器上,并将得到的响应返回给客户端。反向代理隐藏了服务器的真实身份和位置信息,客户端只知道与反向代理进行通信,而不知道真正的服务器。 比如:我们访问淘宝的时候,淘宝内部肯定不是只有一台服务器,它的内部有很多台服务器,那我们进行访问的时候,因为服务器中间session不共享,那我们是不是在服务器之间访问需要频繁登录,那这个时候淘宝搭建一个过渡服务器,对我们是没有任何影响的,我们是登录一次,但是访问所有,对我们来说,客户端对代理是无感知的,客户端不需要任何配置就可以访问,我们只需要把请求发送给反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器的地址。
plain 复制代码
        # 反向代理,处理管理端发送的请求
        location /api/ {
            proxy_pass   http://localhost:8080/admin/;
            #proxy_pass   http://webservers/admin/;
        }
        
        # 反向代理,处理用户端发送的请求
        location /user/ {
            proxy_pass   http://webservers/user/;
        }
        
        # WebSocket
        location /ws/ {
            proxy_pass   http://webservers/ws/;
            proxy_http_version 1.1;
            proxy_read_timeout 3600s;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "$connection_upgrade";
        }

2.负载均衡

负载均衡是Nginx的又一大特点,负载均衡(Load Balancing)是一种分配工作负载(即请求或数据)到多个计算资源的技术,目的是在不过载任何单个资源的情况下提高整体系统性能,增强可靠性和可扩展性。其实就是多个服务器轮转接收客户端请求,减轻单台服务器压力。

轮询

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

适合服务器配置相当,无状态且短平快的服务使用。也适用于图片服务器集群和纯静态页面服务器集群。

加权轮询

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的

情况。这种方式比较灵活,当后端服务器性能存在差异的时候,通过配置权重,可以让服务器的性能得到充分发挥,有效利用资源。weight和访问比率成正比,用于后端服务器性能不均的情况。权重越高,在被访问的概率越大

加权轮询示例:

plain 复制代码
    upstream webservers{
      server 127.0.0.1:8080 weight=90 ;
      #server 127.0.0.1:8088 weight=10 ;
    }

IP_Hash

上述方式存在一个问题:在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。

我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

Nginx配置文件结构

在正式开始使用Nginx之前的最后一部,我们先了解一下Nginx的配置文件,所谓磨刀不误砍柴工~

我们可以找到Nginx/config/nginx.config 这里就存放了nginx的核心

以下为整体结构

nginx 复制代码
...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}
  • 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等(这个配置指定了Nginx服务器的工作进程数。工作进程是Nginx用于处理请求的实际进程,每个工作进程可以独立处理请求。设置为1意味着所有请求都由单个工作进程处理。)。
  • events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
  • http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
  • server块:配置虚拟主机的相关参数,一个http中可以有多个server。
  • location块:配置请求的路由,以及各种页面的处理情况。

再通过一个实际例子具体说明

nginx 复制代码
########### 每个指令必须有分号结束。#################
#user administrator administrators;  #配置用户或者组,默认为nobody nobody。
#worker_processes 2;  #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大连接数,默认为512
}
http {
    include       mime.types;   #文件扩展名与文件类型映射表
    default_type  application/octet-stream; #默认文件类型,默认为text/plain
    #access_log off; #取消服务日志    
    log_format myFormat '$remote_addr--$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
    access_log log/access.log myFormat;  #combined为日志格式的默认值
    sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。

    upstream mysvr {   
      server 127.0.0.1:7878;
      server 192.168.10.121:3333 backup;  #热备
    }
    error_page 404 https://www.baidu.com; #错误页
    server {
        keepalive_requests 120; #单连接请求上限次数。
        listen       4545;   #监听端口
        server_name  127.0.0.1;   #监听地址       
        location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
           #root path;  #根目录
           #index vv.txt;  #设置默认页
           proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
           deny 127.0.0.1;  #拒绝的ip
           allow 172.18.5.54; #允许的ip           
        } 
    }
}

安装并部署你的静态网页

言归正传,了解了Nginx的基本知识,接下来我们开始正式安装并部署你的第一个静态网页!(本教程基于CentOS7+宝塔)

1. 安装(懒人直接看3)

(1) 官网安装并解压

nginx: download

shell 复制代码
第一步:下载nginx 这里以1.6.2版本为例
第二步:共享安装文件到我们的linux上面
第三步:将文件拷贝到/usr/local下面
第四步:安装 tar -zxvf xxxx.tar.gz
第五步:下载所需要的依赖库 yum install pcre  yum install pcre-devel  yum install zlib   yum install zlib-devel
第六步:进行config的配置
cd nginx-1.6.2 && ./configure --prefix=/usr/local/nginx
第七步:安装
make && make install 

(2) 命令行安装

plain 复制代码
# Centos
sudo yum install nginx -y

(3) 宝塔面板(新手友好)

宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 (bt.cn)

plain 复制代码
url=https://download.bt.cn/install/install_lts.sh;if [ -f /usr/bin/curl ];then curl -sSO $url;else wget -O install_lts.sh $url;fi;bash install_lts.sh ed8484bec

命令行安装宝塔并配置后,直接在宝塔面板进行无脑安装

安装后会自动运行,当然也可以通过命令运行

shell 复制代码
# 检查nginx配置的语法是否没有错误
sudo nginx -t 

# 启动
sudo systemctl start nginx

# 重启
sudo systemctl restart nginx

# 重新加载配置文件
sudo nginx -s reload

2.查看配置文件

可以直接搜索配置文件的位置,避免因为安装方式不同找不到

shell 复制代码
[root@123 local]# find / -name 'nginx.conf'
/www/server/nginx/conf/nginx.conf
/www/backup/file_history/www/server/nginx/conf/nginx.conf

[root@123 local]#cd /www/server/nginx/conf
[root@123 conf]# vim nginx.conf

我们直接俄定位到http中的server上下文

nginx 复制代码
server
    {
        listen 888;
        server_name myadmin;
        index index.html index.htm index.php;
        root  /www/server/nginx/html;

        #error_page   404   /404.html;
        include enable-php.conf;

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /\.
        {
            deny all;
        }

        access_log  /www/wwwlogs/access.log;
    }

3.编写或放入自己的静态页面文件

将 root 中的路径改为自己实际存储静态文件所在的目录,端口按照需要修改为已开放的安全组,推荐为80端口

一切准备就绪后,我们就可以通过 curl 127.0.0.1查看自己的网页是否可以正常获取了

示例配置项

nginx 复制代码
server
    {
        listen 888;
        server_name phpmyadmin;
        index index.html index.htm index.php;
        root  /www/server/nginx/html;

        #error_page   404   /404.html;
        include enable-php.conf;

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /\.
        {
            deny all;
        }

        access_log  /www/wwwlogs/access.log;
    }

index.html页内容

本地访问测试成功

上线效果

相关推荐
琴剑诗酒1 分钟前
架构第四章:nginx源代码安装和基本配置
运维·nginx·架构
tjsoft13 分钟前
delphi 12 webserver post数据与对应的接收方式
服务器·前端·数据库
北国1371 小时前
python端拉流检测后再推流到流媒体服务器实现前端拉流查看(多摄像头切换)
服务器·前端·python·opencv·流媒体服务器
不像程序猿的程序员1 小时前
生产环境中,nginx 最多可以代理多少台服务器,这个应该考虑哪些参数 ?怎么计算呢
服务器·nginx·github
兔老大RabbitMQ1 小时前
scp比rz sz传文件更好
linux·服务器·网络
路由侠内网穿透1 小时前
外网访问多人协作 OnlyOffice 文档服务器
大数据·运维·服务器
Suckerbin2 小时前
linux-FTP服务器配置
linux·运维·服务器·网络
海绵波波1072 小时前
集群聊天服务器面试问题
运维·服务器·面试
北京华人开创公司2 小时前
京准电钟:NTP网络校时服务器从入门到精准
运维·服务器·网络·时钟同步·ntp校时服务器·网络校时服务器
奇迹气泡2 小时前
nfs服务器
运维·服务器·网络