Nginx学习教程

目录

一、Nginx的优点

二、在linux安装Nginx

三、Nginx服务启动与停止

四、Nginx配置文件解读

五、Nginx访问权限

六、Nginx设置虚拟主机(服务)

七、Nginx反向代理与负载均衡

八、Nginx适配PC与移动端

九、开启Gzip压缩

十、nginx.conf 文件截图


  • 一、Nginx的优点

  • 支持海量高并发:采用IO多路复用epoll。官方测试Nginx能够支持5万并发链接,实际生产环境中可以支撑2-4万并发连接数。
  • 内存消耗少:在主流的服务器中Nginx目前是内存消耗最小的了,比如我们用Nginx+PHP,在3万并发链接下,开启10个Nginx进程消耗150M内存。
  • 免费使用可以商业化:Nginx为开源软件,采用的是2-clause BSD-like协议,可以免费使用,并且可以用于商业。
  • 配置文件简单:网络和程序配置通俗易懂,即使非专业运维也能看懂。
  • 还有其他优势,比如反向代理功能,负载均衡功能
  • 二、在linux安装Nginx

  1. 执行以下脚本

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

yum -y install wget httpd-tools vim 

    2.目录创建

  • 进入系统后,在目录下建立了一个nginx的文件夹。
  • 进入 nginx文件夹 ,命令是 cd nginx。
  • 分别使用mkdir建立 app,backup,download,logs,work文件夹

   3.查看可用的nginx源

yum list | grep nginx

  4.自行配置最新的nginx源

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

填写以下代码

[nginx]

name=nginx repo

baseurl=http://nginx.org/packages/centos/7/$basearch/

gpgcheck=0

enabled=1

 

  5.执行安装nginx命令

yum install nginx

 6.查看nginx版本

nginx -v

三、Nginx服务启动与停止

1、使用systemctl命令启动

systemctl start nginx.service

 

2、systemctl 停止

systemctl stop nginx.service

3、重启Nginx服务

systemctl restart nginx.service

4、重新载入配置文件

在重新编写或者修改Nginx的配置文件后,都需要作一下重新载入,这时候可以用Nginx给的命令

nginx -s reload

5、查看端口号

在默认情况下,Nginx启动后会监听80端口,从而提供HTTP访问,如果80端口已经被占用则会启动失败。我么可以使用netstat -tlnp命令查看端口号的占用情况。

四、Nginx配置文件解读

1、nginx.conf文件

#运行用户,默认即是nginx,可以不进行设置

user  nginx;

#Nginx进程,一般设置为和CPU核数一样

worker_processes  1;   

#错误日志存放目录

error_log  /var/log/nginx/error.log warn;

#进程pid存放位置

pid        /var/run/nginx.pid;

events {

    worker_connections  1024; # 单个后台进程的最大并发数

}

http {

    include       /etc/nginx/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  /var/log/nginx/access.log  main;   #nginx访问日志存放位置

    sendfile        on;   #开启高效传输模式

    #tcp_nopush     on;    #减少网络报文段的数量

    keepalive_timeout  65;  #保持连接的时间,也叫超时时间

    #gzip  on;  #开启gzip压缩

    include /etc/nginx/conf.d/*.conf; #包含的子配置项位置和文件

2、conf.d目录下的文件解读

打开conf.d目录,然后用vim defalut.conf查看

server {

    listen       80;   #配置监听端口

    server_name  localhost;  #配置域名

    #charset koi8-r;     

    #access_log  /var/log/nginx/host.access.log  main;

    location / {

        root   /usr/share/nginx/html;     #服务默认启动目录

        index  index.html index.htm;    #默认访问文件

    }

#error_page  404              /404.html;   # 配置404页面

#error_page  404          www.baidu.com;   # 还可以配置为链接地址

    # redirect server error pages to the static page /50x.html

    error_page   500 502 503 504  /50x.html;   #错误状态码的显示页面,配置后需要重启

    location = /50x.html {

        root   /usr/share/nginx/html;

    }

  }

五、Nginx访问权限

1、设置访问权限

可以直接在default.conf里进行配置

location / {

        allow  45.76.202.231; #允许访问的IP

        deny   all;           #全部不允许访问 (deny要放在allow之后)因为两个权限指令,先出现的设置会覆盖后出现的设置

        #deny   45.76.202.200; #特定的IP不允许访问   

    }

2、复杂访问控制权限匹配

在工作中,访问权限的控制需求更加复杂,例如,对于网站下的img(图片目录)是运行所有用户访问,但对于网站下的admin目录则只允许公司内部固定IP访问。这时候仅靠deny和allow这两个指令,是无法实现的。我们需要location块来完成相关的需求匹配。

 

上面的需求,配置代码如下:

    location =/img{

        allow all;

    }

    location =/admin{

        deny all;

    }

=号代表精确匹配,使用了=后是根据其后的模式进行精确匹配。这个直接关系到我们网站的安全,一定要学会。

3、使用正则表达式设置访问权限

只有精确匹配有时是完不成我们的工作任务的,比如现在我们要禁止访问所有php的页面,php的页面大多是后台的管理或者接口代码,所以为了安全我们经常要禁止所有用户访问,而只开放公司内部访问的。

 

代码如下:

 location ~\.php$ {

        deny all;

    }

这样我们再访问的时候就不能访问以php结尾的文件了。

六、Nginx设置虚拟主机(服务)

1、基于端口号配置虚拟主机

可以在conf.d文件夹下再新建一个文件8000.conf

 

server{

        listen 8000;

        server_name localhost;

        root /usr/share/nginx/html/html8000;

        index index.html;

}

2、基于IP的虚拟主机

基于IP和基于端口的配置几乎一样,只是把server_name选项,配置成IP就可以了

 

server{

        listen 8000;

        server_name  112.113.180.200;

        root /usr/share/nginx/html/html8000;

        index index.html;

}

这时侯访问112.1113.180.200:8000就可以了。

3、基于域名配置虚拟主机

基于IP和基于域名类似,只是将IP地址换成域名而已,使用到的域名要提前解析好。

 

server{

        listen 80;

        server_name nginx.asion.com;

        location / {

                root /usr/share/nginx/html/html8000;

                index index.html index.htm;

        }

}

七、Nginx反向代理与负载均衡

1、配置反向代理的好处

 

  • 安全性:正向代理的客户端能够在隐藏自身信息的同时访问任意网站,这个给网络安全代理了极大的威胁。因此,我们必须把服务器保护起来,使用反向代理客户端用户只能通过外来网来访问代理服务器,并且用户并不知道自己访问的真实服务器是哪一台,可以很好的提供安全保护。
  • 功能性:反向代理的主要用途是为多个服务器提供负债均衡、缓存等功能。负载均衡就是一个网站的内容被部署在若干服务器上,可以把这些机子看成一个集群,那Nginx可以将接收到的客户端请求“均匀地”分配到这个集群中所有的服务器上,从而实现服务器压力的平均分配,也叫负载均衡。

 

2、配置反向代理和负载均衡

  • 反向代理

 

server{

        listen 80;

        server_name  nginx.asion.com;

        location / {

               proxy_pass  http://asion.com;

        }

}

  • 负载均衡

 

upstream tomcatserver1 {  

    server 192.168.72.49 weight=3;  #默认为1.weight越大,负载的权重就越大

    server 192.168.72.50;  

    }   

 server {  

        listen       80;  

        server_name  8080.max.com;  

        #charset koi8-r;  

        #access_log  logs/host.access.log  main;  

        location / {  

            proxy_pass   http://tomcatserver1;  

            index  index.html index.htm;  

        }  

     }

 

3、其他配置

反向代理还有些常用的指令:

proxy_set_header :在将客户端请求发送给后端服务器之前,更改来自客户端的请求头信息。

proxy_connect_timeout:配置Nginx与后端代理服务器尝试建立连接的超时时间。

proxy_read_timeout : 配置Nginx向后端服务器组发出read请求后,等待相应的超时时间。

proxy_send_timeout:配置Nginx向后端服务器组发出write请求后,等待相应的超时时间。

proxy_redirect :用于修改后端服务器返回的响应头中的Location和Refresh。

 

八、Nginx适配PC与移动端

在/usr/share/nginx/目录下新建两个文件夹,分别为:pc和mobile目录。并在目录中分别创建index.html

1.修改nginx配置文件

server{

     listen 80;

     server_name nginx.asion.com;

     location / {

      root /usr/share/nginx/pc;

      if ($http_user_agent ~ '(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT-)|(SonyEricsson)|(NEC-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC-)|(SED-)|(EMOL-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)') {

         root /usr/share/nginx/mobile;

      }

      index index.html;

     }

}

九、开启Gzip压缩

1、配置项说明

gzip : 该指令用于开启或 关闭gzip模块。

gzip_buffers : 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。

gzip_comp_level : gzip压缩比,压缩级别是1-9,1的压缩级别最低,9的压缩级别最高。压缩级别越高压缩率越大,压缩时间越长。

gzip_disable : 可以通过该指令对一些特定的User-Agent不使用压缩功能。

gzip_min_length:设置允许压缩的页面最小字节数,页面字节数从相应消息头的Content-length中进行获取。

gzip_http_version:识别HTTP协议版本,其值可以是1.1.或1.0.

gzip_proxied : 用于设置启用或禁用从代理服务器上收到相应内容gzip压缩。

gzip_vary : 用于在响应消息头中添加Vary:Accept-Encoding,使代理服务器根据请求头中的Accept-Encoding识别是否启用gzip压缩。

gzip_types : 压缩的文件类型。

2、配置示例

http {

   .....

    gzip  on;

    gzip_types  text/plain application/javascript text/css;

   .....

}

十、nginx.conf 文件截图

1、配置案例

 

Nginx学习教程

 

 

Nginx学习教程

 

2、配置https 服务

server {

  listen       443 ssl;

  server_name    xxx.abc.com;  // 域名

  ssl_certificate      cert/server.crt; // crt的存放目录

  ssl_certificate_key  cert/server.key; // key 的存放目录

  /*

   设置ssl/tls会话缓存的类型和大小。如果设置了这个参数一般是shared,buildin可能会参数内存碎片,默认是none,和off差不多,停用缓存。如shared:SSL:10m表示我所有的nginx工作进程共享ssl会话缓存,官网介绍说1M可以存放约4000个sessions。

  */

  ssl_session_cache    shared:SSL:1m;

  // 客户端可以重用会话缓存中ssl参数的过期时间,内网系统默认5分钟太短了,可以设成30m即30分钟甚至4h。

  ssl_session_timeout  5m;

 

  /*

   选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同。

   这里指定的是OpenSSL库能够识别的写法,你可以通过 openssl -v cipher 'RC4:HIGH:!aNULL:!MD5'(后面是你所指定的套件加密算法) 来看所支持算法。

  */

  ssl_ciphers  HIGH:!aNULL:!MD5;

 

  // 设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。

  ssl_prefer_server_ciphers  on;

 

  location / {

    proxy_pass http://localhost:3001;

  }

}

 

参考自https://www.jspang.com/detailed?id=39

https://www.cnblogs.com/tugenhua0707/p/10940977.html