使用nginx作为图片服务器

1、nginx安装参考:https://blog.csdn.net/u013792404/article/details/93863306

 

2、修改配置文件

访问http://www.aabbcc.com  重定向到https://www.aabbcc.com ,    https://www.aabbcc.com作为应用访问域名,负载均衡,请求转发到127.0.0.1:8080   。 http://img.aabbcc.com作为图片访问域名, 将图片上传到/usr/local/images/ ,  如/usr/local/images/001.jpg , 访问路径就是http://img.aabbcc.com/001.jpg

 

 


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    upstream server1 {
        server 127.0.0.1:8080 ;
    }
    #gzip  on;
    server {
        listen       443 ssl ;
        server_name  www.aabbcc.com;

        ssl_certificate      www.aabbcc.com.pem;
        ssl_certificate_key  www.aabbcc.com.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES25;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers  on;

        location / {
                proxy_pass http://server1;
        #       root   html;              
        #       index  index.html index.htm;
        }
    }
    
    
    server {
        listen       80;
        server_name  www.aabbcc.com;
        rewrite ^(.*)$ https://$host$1 permanent;
        # 把http的域名请求转成https
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        #location / {
        #     root   html;
        #     index  index.html index.htm;
        #}
    }

	
    server {
        listen       80;
        server_name  img.aabbcc.com;
	location ~ .*\.(gif|jpg|jpeg|png)$ {  
		expires 24h;  
		  root /usr/local/images/;#指定图片存放路径  
		  access_log /usr/local/nginx/logs/imagesAccess.log;#日志存放路径  
		  proxy_store on;  
		  proxy_store_access user:rw group:rw all:rw;  
		  proxy_temp_path     /usr/local/images/;#图片访问路径  
		  proxy_redirect     off;  
		  proxy_set_header    Host 127.0.0.1;  
		  client_max_body_size  10m;  
		  client_body_buffer_size 1280k;  
		  proxy_connect_timeout  900;  
		  proxy_send_timeout   900;  
		  proxy_read_timeout   900;  
		  proxy_buffer_size    40k;  
		  proxy_buffers      40 320k;  
		  proxy_busy_buffers_size 640k;  
		  proxy_temp_file_write_size 640k;  
		  if ( !-e $request_filename)  
		  {  
			 proxy_pass http://127.0.0.1;#默认80端口  
		  }  
	}
    }
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

 

重启nginx :  ./bin/nginx -s reload

 

使用nginx作为图片服务器_第1张图片

使用nginx作为图片服务器_第2张图片

 

3、 图片访问路径配置

上面图片只是在  /usr/local/images/xxx.jpg   ,   如果images下还有多层目录,如 /usr/local/images/20190924/abc.jpg ,用上面的配置就访问不了了。    在路径匹配中可以加上正则表达式

location ~ ^/\d+/[\w]+\.(gif|jpg|jpeg|png)$ {

区分大小写匹配,  以多位数字开头,以.(gif|jpg|jpeg|png) 结尾    匹配     /usr/local/images/  多个数字 / 多个字符 . jpg

访问路径:   http://img.aabbcc.com/20190924/abc.jpg

 

server {
        listen       80;
        server_name  img.aabbcc.com;

        location ~ ^/\d+/[\w]+\.(gif|jpg|jpeg|png)$ {
                #expires 24h;
              expires 10m;
              root /usr/local/images/;#指定图片存放路径
              access_log /usr/local/nginx/logs/imagesAccess.log;#日志存放路径
              proxy_store on;
              proxy_store_access user:rw group:rw all:rw;
              proxy_temp_path     /usr/local/images/;#图片访问路径
              proxy_redirect     off;
              proxy_set_header    Host 127.0.0.1;
              client_max_body_size  10m;
              client_body_buffer_size 1280k;
              proxy_connect_timeout  900;
              proxy_send_timeout   900;
              proxy_read_timeout   900;
              proxy_buffer_size    40k;
              proxy_buffers      40 320k;
              proxy_busy_buffers_size 640k;
              proxy_temp_file_write_size 640k;
              if ( !-e $request_filename)
              {
                 proxy_pass http://127.0.0.1;#默认80端口  
              }
        }
}

如果访问报错  403 ,

1、 修改nginx.conf  ,  第一行加上  user  root (以root用户启动)

       使用nginx作为图片服务器_第3张图片

 

2、给图片路径加权限

      chown   root:root  -R   /usr/local/images

      chmod  777  -R  /usr/local/images 

3、查看当前selinux的状态。

          1.    /usr/sbin/sestatus

          2. 将SELINUX=enforcing 修改为 SELINUX=disabled 状态。

                vi /etc/selinux/config

                 #SELINUX=enforcing

                SELINUX=disabled

                重启生效。reboot。

 

 

 

5、nginx   location  匹配规则

  • =         严格匹配。如果请求匹配这个location,那么将停止搜索并立即处理此请求
  • ~         区分大小写匹配(可用正则表达式)
  • ~*       不区分大小写匹配(可用正则表达式)
  • !~       区分大小写不匹配
  • !~*     不区分大小写不匹配
  • ^~      如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式

 

location   /   {}        匹配任意请求

location ~* .(gif|jpg|jpeg)$ {
    .......

不区分大小写匹配任何以gif、jpg、jpeg结尾的请求

location ~ ^.+\.jpg$ {
    root /usr/local/nginx/html/;
}
区分大小写匹配以.jpg结尾的请求,并设置此location的路径是/usr/local/nginx/html/。
也就是以.jpg结尾的请求将访问/usr/local/nginx/html/ 路径下的jpg文件

 

如匹配  /20190925/abc.png     /20190926/tmt.jpg  

location ~  ^/\d+/[\w]+\.(gif|jpg|jpeg|png)$ {

区分大小写匹配,以/开头,然后多位数字,然后/ ,然后多位字符,然后以.图片格式结尾

 

使用nginx作为图片服务器_第4张图片

 

 

你可能感兴趣的:(Nginx,nginx)