NginxNginx基础操作

Posted Do_GH

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NginxNginx基础操作相关的知识,希望对你有一定的参考价值。

一、nginx概述

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx 是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性:

在连接高并发的情况下,Nginx是Apache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。

二、Nginx目录简介

  • /usr/sbin/nginx Nginx的命令程序
  • /etc/nginx/nginx.conf Nginx配置文件
  • /var/log/nginx Nginx日志文件
  • /usr/share/nginx/ Nginx默认虚拟主机目录

三、Nginx常用命令

命令描述
sudo nginx启动Nginx
sudo nginx -s stop[quit]停止Nginx
sudo nginx -s reload重启Nginx
sudo nginx -c /etc/nginx/nginx.conf加载指定配置文件启动
sudo nginx -v查看Nginx版本号

四、Nginx配置文件

4.1 nginx.conf

nginx.conf为Nginx的主要配置文件,其中包含全局配置、工作模式和HTTP配置等信息。以下为该文件的默认配置

# Nginx运行时用户名称
user  nginx;

# 工作进程数量,根据CPU的核心数来设置
worker_processes  auto;

# 异常日志保存路径以及日志等级
error_log  /var/log/nginx/error.log notice;
# PID文件位置
pid        /var/run/nginx.pid;

# 工作模式配置
events 
    # 单个进程运行时最大连接数
    worker_connections  1024;


# HTTP配置
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;

    # 是否允许调用sendfile函数来输出文件
    sendfile        on;
    #tcp_nopush     on;

    # 连接超时时间(单位s)
    keepalive_timeout  65;

    # 是否开启gzip压缩
    #gzip  on;

    # 引入外部配置文件,包含虚拟主机信息
    include /etc/nginx/conf.d/*.conf;


4.2 default.conf

default.conf为虚拟主机的配置文件

server 
    # 端口号
    listen       80;
    # 域名(访问地址)
    server_name  localhost;

    # 运行时日志保存位置及日志等级
    #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;

    # 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;
    

如果需要配置多个项目,可以创建不同的*.conf文件,配置对应的项目

五、部署项目

Nginx的优势在于可以创建不同的虚拟主机,从而运行多个项目。例如我们在主机的主目录上创建两个不同的项目淘宝和京东商城。

此时我们在Nginx的配置目录下创建对应的配置文件:

jd.conf

server 
    listen       80;
    server_name  www.jd.test.com;

    location / 
        root   /home/dogh/software/nginx/jd;
        index  index.html index.htm;
    

taobao.conf

server 
    listen       80;
    server_name  www.taobao.test.com;

    location / 
        root   /home/dogh/software/nginx/taobao;
        index  index.html index.htm;
    

创建对应的首页并重启Nginx。由于两个程序在同一个物理机上,所以采用使用不同的域名的方式来分别进行访问,此时需要配置访问主机的hosts文件使其能够正常解析域名。

六、动静分离

使用Tomcat加载静态资源时普遍效率不高,会影响Web响应慢,并且占用系统资源。此时可以使用Nginx去加载静态资源文件,将动态请求依旧交给Tomcat去处理。

6.1 加载静态资源

编辑配置文件,指定静态资源的本地路径

# 使用通配符指定需要加载的文件类型
location ~ .*\\.(js|css|ico|png|jpg|eot|svg|ttf|woff) 
    root /home/dogh/software/static;

将项目中静态资源放到该目录中,重启Nginx

6.2 图片服务器应用

在实际应用中,对于项目运行过程中产生的文件资源会存放在单独的服务器中,所以需要访问的时候就需要通过HTTP协议访问文件服务器上的资源。此时Nginx就能够很好的实现这一功能。

  1. 通过FTP上传图片至指定目录
  2. 修改default.conf文件,添加文件访问的路由
     # 设置访问路由
     location /images 
         # 设置图片存储位置(图片位置为root地址加路由地址)
         root    /home/dogh/software/nginx;
         # 是否开启文件目录,可供用户查询所有文件
         autoindex    on;
     
    
  3. 重启Nginx服务

此时就可以通过HTTP协议直接访问主机的图片

需要注意访问权限问题,在Nginx的主配置文件中,Nginx的运行使用的是nginx用户,若文件并不是通过Nginx程序上传,会由于用户不同导致访问权限受限,则需要提升文件的权限或者修改Nginx的运行用户

方法一:

cd ~/software/images

# 提升文件权限,使其他用户也可访问
chmod 604 image.jpg

方法二:

修改nginx.conf中第一行use nginx修改为use root提升Nginx运行权限,保存后重启Nginx后即可。

若不修改文件权限或Nginx运行权限,在访问图片时就会报403无法访问的错误

七、反向代理

7.1 正向代理与反向代理

7.1.1 正向代理

正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性(由mod_cache提供)减少网络使用率。

使用ProxyRequests指令即可激活正向代理。因为正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。

7.1.2 反向代理

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。

7.1.3 区分

  • 正向代理主要面对的是客户端,负责接收不同客户端的请求转发给服务端;而反向代理是面对服务端,负责将请求分发给集群。
  • 正向代理主要保护的客户端的信息安全,隐藏客户端信息;而反向代理主要保护服务端信息安全,避免服务端被攻击。

7.2 使用Nginx搭建代理服务器

7.2.1 创建配置文件

# 复制一个新的配置文件
sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/proxy.conf

7.2.2 添加代理

修改proxy.conf添加代理服务器

# 定义Tomcat集群
upstream tomcatserver 
    server 192.168.124.21:8080;


server 
    listen       80;
    server_name  www.tomcat.com;

    location / 
        # 指定代理地址,注意要使用HTTP协议
        proxy_pass http://tomcatserver;
    


若需要代理多个服务端,则在upstream中追加server即可并指定IP

注意代理集群名称(upstream)不能出现特殊字符

7.3 负载均衡

项目通过反向代理,可以使用Nginx代理多个服务器,因此就会涉及到请求最终会发送给哪个服务端去处理的问题。

Nginx默认使用轮询的方式进行请求,及请求完1号服务器,第二条请求去请求2号服务器依次类推。也可以为每个服务器设置权重,增加获取请求的概率。

7.3.1 负载均衡策略

  1. 轮询
    Nginx的默认负载均衡策略,按照请求顺序你一个,我一个。
    示例:
     upstream tomcatserver 
         server 192.168.124.21:8080;
         server 192.168.124.22:8080;
     
    
  2. 权重
    增加服务端获得请求的概率,在每个server的代理服务后加上weight=1,权重越大获得请求就越多。
    示例:
     upstream tomcatserver 
         server 192.168.124.21:8080 weight=100;
         server 192.168.124.22:8080 weight=200;
     
    
  3. IP绑定ip_hash
    每个请求发送到服务端后进行绑定,这样为每个访客固定一个服务端,可以解决Session的问题。
    示例:
     upstream tomcatserver 
         ip_hash;
         server 192.168.124.21:8080;
         server 192.168.124.22:8080;
     
    
  4. fair
    根据各个服务端的响应时间分配请求,响应时间短的优先分配。
    示例:
     upstream tomcatserver 
         server 192.168.124.21:8080;
         server 192.168.124.22:8080;
         fair;
     
    
  5. url_hash
    按访问url的hash结果分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
     upstream tomcatserver 
         server 192.168.124.21:8080;
         server 192.168.124.22:8080;
         hash $request_uri; 
         hash_method crc32; 
     
    

八、高并发

  • 负载均衡:使用服务集群处理
  • 动静分离:使用Nginx、CDN搭建静态资源服务器
  • 缓存:以空间换时间,提高系统效率
  • 限流:对访问流量进行控制
  • 降级:对其他非必要业务进行服务降载

以上是关于NginxNginx基础操作的主要内容,如果未能解决你的问题,请参考以下文章

NginxNginx基础操作

NginxNginx基础操作

NginxNginx 常用的基础配置

[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础

[vscode]--HTML代码片段(基础版,reactvuejquery)

VSCode自定义代码片段——git命令操作一个完整流程