详解Nginx 静态文件服务配置及优化

下面是关于“详解Nginx 静态文件服务配置及优化”的完整攻略,其中包含了两条示例说明。

详解Nginx 静态文件服务配置及优化

为什么需要Nginx 静态文件服务?

由于动态语言如PHP、Python、Java等每次请求都需要解析代码,会对服务器性能造成一定的负担,特别是在并发量较大时,响应速度会非常慢,影响用户的体验。而Nginx的核心为静态文件服务,可以高效地处理静态资源,从而提高网站的响应速度和并发量。

静态文件服务的配置

安装与启动Nginx

首先,需要在服务器上安装Nginx,根据不同的操作系统版本,具体安装方法可能会有所差异。

然后,在命令行中启动Nginx,在Linux中执行如下命令:

sudo service nginx start

配置静态文件服务

Nginx的静态文件服务需要在配置文件中进行设置。配置文件一般在Nginx根目录下的conf文件夹中。

location指令

对于静态文件服务,一般我们会用到location指令。其具体作用是:将URI与location后面的参数进行匹配,然后对此URI进行相应的操作。

例如,在配置文件中添加如下内容:

location /static/ {
    root /usr/share/nginx/html/;
}

表示我们会把URI为/static/的请求映射到服务器上的/usr/share/nginx/html/目录中。

index指令

在配置静态文件服务时,一般也需要指定默认首页。可以通过添加index参数来实现。

例如,添加如下内容:

index index.html index.htm;

表示若用户请求的URI目录下有index.html或index.htm文件,则默认打开此文件。

gzip指令

在Nginx的静态文件服务器上,还可以使用gzip指令进行压缩。开启gzip功能可以使返回的内容被压缩,从而更快地将内容传输给客户端。

例如,添加如下内容:

gzip on;

表示打开gzip压缩功能。可以加上其他一些参数,例如:

gzip_types text/plain application/x-javascript text/css application/xml;
gzip_min_length 1k;
gzip_vary on;

access_log指令

最后,我们还可以通过access_log指令记录静态文件服务的日志。在配置文件中添加如下内容:

access_log /var/log/nginx/access.log;

表示记录访问日志到/var/log/nginx/access.log文件中。

静态文件服务的优化

大多数网站的性能瓶颈都集中在了网络请求上,因此提升网络请求效率是优化网站性能的关键。

缓存

一种优化方式是缓存。如果用户请求的内容是比较稳定的,并不需要实时更新,那么可以通过缓存的方式来加快访问速度。

expires指令

expires指令可以使浏览器和代理服务器缓存文件,并指定文件过期时间。在配置文件中添加如下内容:

location /static/ {
    root /usr/share/nginx/html/;
    expires 1d;
}

表示在浏览器中缓存/static/目录下的文件,并指定文件的过期时间为1天。

负载均衡

另一种优化方式是负载均衡。负载均衡可以将请求分配到多个服务器上,提高整个网站的吞吐量和可用性。Nginx支持多种负载均衡策略,可以根据实际情况选择合适的策略。

以轮询方式实现负载均衡

例如,我们可以通过轮询方式实现负载均衡,即每个请求按顺序传递到不同的服务器上。可以在配置文件中添加如下内容:

upstream server_pool {
    server server1:port;
    server server2:port;
    server server3:port;
}
server {
    listen 80;
    location / {
        proxy_pass http://server_pool;
        proxy_set_header Host $host;
    }
}

其中,server1、server2、server3表示需要负载均衡的服务器IP,port表示服务器端口号。

示例1:搭建一个简单的静态文件服务器(Docker)

我们可以通过Docker快速地搭建一个简单的Nginx静态文件服务器,步骤如下:

  1. 创建一个文件夹作为Nginx的根目录,例如:
mkdir /path/to/your/html
  1. 在该文件夹中,添加一个index.html的文件,例如:
cd /path/to/your/html
echo "Hello World" > index.html
  1. 新建一个Dockerfile,指定基础镜像为Nginx,并拷贝配置文件和根目录到镜像中,例如:
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
COPY html /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]

其中,nginx.conf和html文件夹分别是配置文件和根目录。

  1. 构建Docker镜像:
docker build -t my-nginx-image .
  1. 启动Docker容器:
docker run -p 8080:80 -d my-nginx-image
  1. 在浏览器中访问:
http://localhost:8080/

示例2:在Nginx上部署静态文件(Kubernetes)

我们可以使用Kubernetes和Nginx Ingress Controller在Nginx上部署静态文件,步骤如下:

  1. 创建一个ConfigMap,将Nginx的配置文件存储在其中,例如:
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  nginx.conf: |
    events {}
    http {
      server {
        listen 80;
        server_name localhost;

        location / {
          index index.html;
          root /usr/share/nginx/html;
          try_files $uri $uri/ /index.html;
        }
      }
    }

其中,nginx.conf文件中指定了Nginx的监听IP和端口等信息。

  1. 创建一个Deployment,指定容器镜像为Nginx,并设置容器配置:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: config-volume
          mountPath: /etc/nginx/conf.d
        - name: html-volume
          mountPath: /usr/share/nginx/html
      volumes:
        - name: config-volume
          configMap:
            name: nginx-config
        - name: html-volume
          persistentVolumeClaim:
            claimName: nginx-html-pvc

其中,volumes中的两个配置项分别为Nginx的配置文件和根目录。

  1. 创建一个Service,将Pod的80端口暴露给Ingress Controller使用:
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - name: http
    protocol: TCP
    port: 80
  1. 创建一个PersistentVolume和PersistentVolumeClaim,在其中存储静态文件:
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nginx-html-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /opt/data/html
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nginx-html-pvc
spec:
  storageClassName: ""
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

其中,路径为/opt/data/html的文件夹将被用于存储根目录中的静态文件。

  1. 创建一个Ingress,将HTTP请求路由到nginx-deployment对应的Service中:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-service
            port:
              name: http

其中,host为Ingress的域名。

  1. 在浏览器中访问Ingress的域名:
http://example.com/

以上就是关于“详解Nginx 静态文件服务配置及优化”的完整攻略,包含了静态文件服务的配置和优化以及两个示例的说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Nginx 静态文件服务配置及优化 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • 基于【 centos7】四 || FastDFS集群+Nginx负载均衡

    1.1 架构图 FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。   1.2 服务器配置 192.168.22.173  tracker-group1 192.168…

    Nginx 2023年4月10日
    00
  • 巧用Nginx配置解决跨域问题

    巧用Nginx配置解决跨域问题 页面nginx配置 1,前端页面放在域名根目录,比如,http://www.xuecheng.com/ ,对应的nginx配置: #门户 location / { alias D:/Z_lhy/SpringCloud/xuecheng_online/www/xc-ui-pc-static-portal/; index inde…

    Nginx 2023年4月13日
    00
  • nginx反向代理踩坑实战记录(容器方式)

    下面是详细讲解“nginx反向代理踩坑实战记录(容器方式)”的完整攻略: nginx反向代理踩坑实战记录(容器方式) 1. 背景 在现代web应用程序中,常常需要使用反向代理来实现负载均衡和高可用性,而nginx是基于高性能和低资源占用率著名的反向代理服务器。在本教程中,我们将使用Docker容器部署nginx反向代理,并讲解在部署过程中可能遇到的一些问题和…

    Nginx 2023年5月16日
    00
  • Nginx服务安装及软件升级

    Nginx服务安装及软件升级 安装Nginx服务 安装Nginx服务需要进行以下步骤: 更新操作系统软件库 shell sudo apt update 安装Nginx shell sudo apt install nginx 启动Nginx服务 shell sudo systemctl start nginx 验证Nginx服务是否正常启动 shell su…

    Nginx 2023年5月16日
    00
  • nginx reload的原理

    nginx启动时,会启动两个进程: 一个是Master进程和worker进程。改变配置后nginx做的事1)改变了nginx配置之后,HUP signal的信号需要发送给主进程。2)主进程首先会检测新配置的语法有效性。3)尝试应用新的配置 1.打开日志文件,并且新分配一个socket来监听。2.如果1失败,则回滚改变,还是会使用原有的配置。3.如果1成功,则…

    Nginx 2023年4月11日
    00
  • nginx vim 单行删除与多行删除

    多行删除 1.首先在命令模式下,输入“:set nu”显示行号; 2.通过行号确定你要删除的行; 3.命令输入“:32,65d”,回车键,32-65行就被删除了,很快捷吧如果无意中删除错了,可以使用‘u’键恢复(命令模式下) 单行删除 光标所在行,dd

    Nginx 2023年4月10日
    00
  • nginx的重试机制以及nginx常用的超时配置说明

    现在对外服务的网站,很少只使用一个服务节点,而是部署多台服务器,上层通过一定机制保证容错和负载均衡。 nginx就是常用的一种HTTP和反向代理服务器,支持容错和负载均衡。 nginx的重试机制就是容错的一种。 在nginx的配置文件中,proxy_next_upstream项定义了什么情况下进行重试,官网文档中给出的说明如下:—————…

    Nginx 2023年4月11日
    00
  • 利用Nginx反向代理解决跨域问题详解

    首先,让我们来了解一下什么是跨域问题。 跨域问题是由于浏览器的同源策略所导致的,同源策略是浏览器最核心的安全功能之一,指的是协议、域名、端口号必须一致,否则就会出现跨域问题。 例如,一个页面的地址是http://www.a.com/index.html,它想要访问另一个服务器上的资源(例如http://www.b.com/data.json),那么就会出现跨…

    Nginx 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部