我是靠谱客的博主 冷艳滑板,最近开发中收集的这篇文章主要介绍nginx入门,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述


nginx入门

文章目录

    • nginx入门
        • nginx介绍
          • nginx简介
          • 基本概念
            • 反向代理
            • 负载均衡
            • 动静分离
        • nginx的安装和常用指令
          • nginx安装
          • nginx的常用命令
        • nginx的配置简单介绍
          • 全局块
          • events块
          • http块
        • nginx的配置举例
          • 反向代理配置
          • 负载均衡配置
          • 动静分离配置
        • nginx出现的问题解决
          • 1. 请求页面成功,但是css,js无法找到
          • 2. 访问页面出现 403 forbidden

nginx介绍

nginx简介

废话不多说,直接请度娘:nginx百度百科

nginx可以作为静态页面的web服务器,同时还支持CGI协议的动态语言,比如perl、php等.但是不支持java. Java程序只能通过与tomcat配合完成.nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50.000个并发连接数

基本概念
反向代理

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP 地址

负载均衡

对于庞大的请求数量,我们增加服务器数量,然后将请求转发到多个服务器上,将负载分发到不同的服务器,说的通俗一点就是分流

负载均衡有以下集中策略:

  • 轮询(默认)

每个请求按照顺序逐一分配到不同的后端服务器,如果某个服务器宕机,可以自动删除该服务器节点

  • weight

权重,默认为1,可以自定义权重,权重越高分配的请求越多

  • ip_hash

每个请求按照访问ip的hash值分配,这样每个访客就会访问一个固定的服务器,可以解决session无法共享的问题

  • fair

按照每个服务器的响应时间来分配,响应时间越短的服务器,分配的优先级越高

动静分离

nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离.严格意义上说应该是动态请求跟静态请求分开,可以理解成使用nginx处理静态页面,Tomcat 处理动态页面.动静分离从目前实现角度来讲大致分为两种

nginx的安装和常用指令

nginx可以安装在Windows或者Linux系统中,因为现在的服务器都是用的Linux系统,而且nginx只有在Linux中才能体现出其优点,所以我们只介绍Linux下的nginx安装,如果感兴趣可以自行搜索Windows下的nginx部署

nginx安装

注意

如果嫌安装以下步骤麻烦,可以直接使用yum命令安装,会自动安装所有的依赖和nginx

  1. 将nginx安装包上传到服务器中
  2. 安装nginx需要的依赖(pcre,openssl,zlib)

使用yum安装即可

yum -y install zlib zlib-devel gcc-c++ libtool openssl openssl-devel

查看pcre是否安装成功(查看pcre版本)

pcre-config --version

查看openssl是否安装成功

openssl

如果进入了openssl命令行状态,说明安装成功

  1. 安装nginx

解压nginx的安装包

tar -zxv -f nginx-1.16.1.tar.gz

然后进入解压完成之后的安装包目录,执行

./configure

然后执行安装命令

make && make install
  1. 查看是否安装成功

安装完成之后,首先查看/usr/local/目录下是否有nginx的目录

如果有,进入到nginx的sbin目录,然后执行启动脚本

cd nginx/sbin/
./nginx

然后查看nginx是否启动成功

ps -ef | grep nginx

如果有2个nginx的进程,说明启动成功

然后打开浏览器,访问主机的80端口(nginx默认的监听端口是80),如果出现

Welcome to nginx!

说明访问成功

如果访问失败,记得查看服务器防火墙是否关闭!

nginx的常用命令

注意

使用nginx命令需要在/usr/local/nginx/sbin/目录下执行,也可以配置全局变量从而在任何位置都可以执行

  • 查看nginx版本号
 ./nginx -v
  • 启动nginx
./nginx
  • 关闭nginx
./nginx -s stop
  • 查新加载nginx

如果修改了配置文件,但不想重启nginx,这个时候可以使用重新加载命令

./nginx -s reload

nginx的配置简单介绍

注意

nginx的配置文件都在/usr/local/ngnix/conf/目录下的nginx.conf

nginx的配置文件由全局块,events块,http块但部分组成

全局块

从配置文件开始到events 块之间的内容,主要会设置些影响 nginx服务器整体运行的配置指令,主要包括配置运行nginx服务器的用户(组)、允许生成的worker process数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等

  • worker_processes

这是nginx服务器并发处理服务的关键配置, worker processes值越大,可以支持的歼发处理星也越多,但是会受到硬件、软件等设备的制约.

events块

events块涉及的指令主要影响nginx服务器与用户的网络连接,常用的设置包括是否开启对多work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个word process可以同时支持的最大连接数等

  • work_connections

表示每个work process支持的最大连接数,默认为1024.

http块

这一部分是nginx中配置最频繁的部分,代理,缓存和日志定义等绝大多数功能和第三方模块的配置都在这里

http配置的包括文件的引入,MIME-TYPE定义,日志自定义,连接超时的时间,单链接请求数上限等,在http块里,还包含server块

###### server块

这一部分和虚拟主机有关系,每个http块可以包含多个server块,每个server快就相当于一台虚拟主机,server块中还有location块,每个server块中也可以有多个location块

  • listen

表示当前虚拟主机监听的端口

  • server_name

表示当前虚拟主机的主机名(或者IP地址),也可以使用正则表达式

  • location [选项] <虚拟地址>

<虚拟地址>表示的是访问该虚拟主机的地址(uri),默认是/

语法

location [ = | ~ | ~* | ^~ | @ ]   /uri/ { 
	#配置内容
}

选项

选项说明
location /uri不带任何修饰符,表示前缀匹配
location = /uri精确前缀匹配,只有完全匹配才能生效
location ^~ /uri普通字符串匹配上以后不再进行正则匹配
location ~ pattern区分大小写的正则匹配
location ~* pattern不区分大小写的正则匹配

nginx的配置举例

反向代理配置

说明 在本示例中,我们使用tomcat服务器(默认端口8080),我们要实现访问服务器的 80端口,通过nginx转发到tomcat的 8080端口

  1. 安装好tomcat后,启动tomcat
<tomcat安装目录>/bin/start.sh

启动之后可以使用浏览器访问虚拟机的8080端口,看是否访问tomcat成功,如果不成功,检查防火墙是否关闭

  1. 在配置文件中的http块中添加以下内容,说白了就是再添加一个虚拟主机,直接复制粘贴一个server块,然后修改其内容就好
server {
        listen       80;
        server_name  192.168.8.128;

        location / {
            root   html;
            proxy_pass http://127.0.0.1:8080/;
            index  index.html index.htm;
        }
        #下面这一部分是错误页面,也可以不配置
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

注意

1. proxy_pass的URL地址后面,如果不加“/”,就把请求的path添加到URL后面,例如:

#注意下面的path(/abc)
location /abc {
    #这里最后面没有"/"
    proxy_pass http://127.0.0.1:8080;
}

这样实际请求的是 http://127.0.0.1:8080/abc

2. proxy_pass的URL地址后面,如果加上“/”,就会先把path去掉,再加上URL

#注意下面的path(/abc)
location /abc {
    #这里最后面加上了"/"
    proxy_pass http://127.0.0.1:8080/;
}

这样实际请求的路径是 http://127.0.0.1:8080

负载均衡配置
  • 轮询
  1. 准备2台以上的tomca服务器,我这里用的是3个,tomcat服务器的搭建这里就不详细说明了,如果不会可以先去学一下
  2. 在nginx配置文件中http中添加如下内容
#这个块表示添加一个负载均衡
upstream <自定义一个负载均衡名称>{
        server <第1个服务器的ip:端口号>;
        server <第2个服务器的ip:端口号>;
        server <第3个服务器的ip:端口号>;
    }
  1. 然后添加一个server
server {
        listen <监听端口号>;
      server_name  <服务器地址>;

        location / {
            proxy_pass http://<刚刚定义的负载均衡名称>;
        }
    }

为了直观一点,举个示例:

upstream tomcatTest{
    server 192.168.8.101:8080;
    server 192.168.8.102:8080;
    server 192.168.8.103:8080;
}

#配置服务器
server {
    listen 82;
    server_name  192.168.8.101;

    location / {
    	proxy_pass http://tomcatTest;
    }
}
  • weight 权重

upstream块中的每个服务器节点后面添加上weight值就好,例如:

upstream tomcatTest{
    server 192.168.8.101:8080 weight=1;
    server 192.168.8.102:8080 weight=2;
    server 192.168.8.103:8080 weight=3;
}
  • ip_hash

直接在upstram块中添加ip_hash即可:

upstream tomcatTest{
ip_hash;
    server 192.168.8.101:8080;
    server 192.168.8.102:8080;
    server 192.168.8.103:8080;
}
  • fair

直接在upstram块中添加fair即可:

upstream tomcatTest{
fair;
    server 192.168.8.101:8080;
    server 192.168.8.102:8080;
    server 192.168.8.103:8080;
}
动静分离配置

注意

如果想要使用nginx设置其他服务器作为静态服务器,需要比较繁琐的配置,这里我们只介绍使用本机作为静态服务器

配置如下:

  1. 首先在本机创建一个存储静态资源的文件夹,举例用/data/static/目录,在static/目录下创建一个test.html文件
  2. 然后配置静态服务器:
server {
    listen 83;
    server_name localhost;

    location /static/ {
        root /data/;
    }
}
  1. 配置好之后重启nginx,然后在浏览器访问<nginx主机地址>:83/static/a.html

补充

通过location 指定不同的后缀名实现不同的请求转发。通过expires参数设置,可以指定浏览器缓存过期时间,无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量

这种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用Expires 来缓存),比如设置为3天,那么3天之内浏览器访问这个URL,发送一个比对服务器文件请求,如果服务器该文件最后更新时间没有变化,则不会从服务器获取,直接调用浏览器的缓存即可,如果有修改,则直接从服务器重新下载

nginx出现的问题解决

1. 请求页面成功,但是css,js无法找到

说明

这是因为浏览器发出的请求仍旧是使用的nginx处理后的路径,所以就方找不到css,js或者图片的路径了,只需要再加上以下内容即可:

location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {
	proxy_pass http://<路径>;
}
location ~ .*.(js|css)?$ {
	proxy_pass http://<路径>;
}   
2. 访问页面出现 403 forbidden

如果在配置好路径之后,访问页面出现403 Forbidden,然后查看nginx的日志文件,位置在/usr/local/nginx/logs/error.log

发现报的错误是Permission denied

这是由于用户和nginx工作用户不一致导致的,有两种解决方法:

  1. 修改配置文件,使nginx的工作用户和启动用户一致(一般是root)
user root; #不要忘了添加结尾的分号,在默认的配置里没有添加上
  1. 修改访问的目录权限为 777
chmod -R 777 <访问的文件目录>


nginx的博大精深之处远远不止这些,如果感兴趣大家可以继续深入学习!

最后

以上就是冷艳滑板为你收集整理的nginx入门的全部内容,希望文章能够帮你解决nginx入门所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部