nginx代理出现静态资源读取不到

原因:读取到是nginx服务器地址下的静态资源,而非被代理服务器的静态资源。
解决:设置如下,形似动静分离

# 反向代理时,静态资源文件读取地址不是实际服务器地址,而是nginx的地址,需要如下配置才能真正读取到静态资源
location ~ .* {
	proxy_pass 	http://192.168.93.105;
	proxy_set_header Host $http_host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Fonwarded-For $proxy_add_x_forwarded_for;
}

主要作用是 proxy_set_header Host $http_host$http_host,如果 $host 依旧不会有效。该处原因暂未明确

2、反向代理可以直接在location 中指定 proxy_pass http://192.168.93.105:8082; 或者 通过 upstream domain 指定服务组,然后指定服务组名(domain)进行代理:proxy_pass http://server_8082;

location / {
	# 反向代理。负载均衡可通过upstream设置多个服务器
	proxy_pass	http://server_8082; 
	# proxy_pass	http://192.168.93.105:8082;
	# 下面几个配置,意思是将http头转发给后端应用,不然你后端应用服务拿客户端IP地址的时候拿到的是nginx代理的地址而不是客户端的。
	#proxy_set_header Host $host;
	#proxy_set_header X-Real-IP $remote_addr;
	#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    #root   html;
    index  index.html index.htm;
}

综合

# 设置负载服务器池(服务组),如果有域名采用域名作为名称
upstream server_8082 {
	server	192.168.93.105:8082 weight=2;
	#server	192.168.0.105:8083 weight=1;
}
server {
    listen       8082;
    server_name  localhost;
     
    location / {
		# 反向代理。负载均衡可通过upstream设置多个服务器
		proxy_pass	http://server_8082; 
		# proxy_pass	http://192.168.93.105:8082;
		# 下面几个配置,意思是将http头转发给后端应用,不然你后端应用服务拿客户端IP地址的时候拿到的是nginx代理的地址而不是客户端的。
		#proxy_set_header Host $host;
		#proxy_set_header X-Real-IP $remote_addr;
		#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #root   html;
        index  index.html index.htm;
    }

	# 反向代理时,静态资源文件读取地址不是实际服务器地址,而是nginx的地址,需要如下配置才能真正读取到静态资源
	location ~ .* {
		proxy_pass	http://server_8082; 
		# proxy_pass	http://192.168.93.105:8082;
		proxy_set_header Host $http_host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Fonwarded-For $proxy_add_x_forwarded_for;
	}
	 
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

参考1
参考2

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nginx是用于HTTP,HTTPS,SMTP,POP3和IMAP协议的开源反向代理服务器,以及负载平衡器,HTTP缓存和Web服务器(原始服务器)。Nginx项目一开始就非常关注高并发,高性能和低内存使用。它获得了两节式BSD许可,并在Linux,BSD变体,Mac OS X,Solaris,AIX,HP-UX以及其他* nix版本上运行。它还具有用于Microsoft Windows的概念证明端口。 托管一些简单的静态内容 $ docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx 或者,Dockerfile可以使用简单的方法来生成包含必要内容的新图像(这比上面的绑定安装要干净得多): FROM nginx COPY static-html-directory /usr/share/nginx/html 将此文件放置在与目录相同的目录中(“ static-html-directory”),运行docker build -t some-content-nginx .,然后启动容器: $ docker run --name some-nginx -d some-content-nginx 暴露外部端口 $ docker run --name some-nginx -d -p 8080:80 some-content-nginx 然后,您可以在浏览器中点击http://localhost:8080或http://host-ip:8080。 复杂的配置 $ docker run --name my-custom-nginx-container -v /host/path/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx 有关nginx配置文件的语法的信息,请参阅官方文档(特别是《入门指南》)。 如果您希望采用默认配置,请使用以下类似内容从运行的nginx容器中复制它: $ docker run --name tmp-nginx-container -d nginx $ docker cp tmp-nginx-container:/etc/nginx/nginx.conf /host/path/nginx.conf $ docker rm -f tmp-nginx-container 也可以使用简单的Dockerfile(在中/host/path/)更干净地完成此操作: FROM nginx COPY nginx.conf /etc/nginx/nginx.conf 如果您CMD在Dockerfile中添加了自定义,请确保将包含-g daemon off;在其中CMD,以使nginx保持在前台,以便Docker可以正确跟踪进程(否则您的容器将在启动后立即停止)! 然后使用构建图像docker build -t custom-nginx .并按如下所示运行它: $ docker run --name my-custom-nginx-container -d custom-nginxNginx配置中使用环境变量 现成的nginx不支持大多数配置块中的环境变量。但是,envsubst如果您需要在nginx启动之前动态生成nginx配置,则可以将其用作解决方法。 这是使用docker-compose.yml的示例: web: image: nginx volumes: - ./mysite.template:/etc/nginx/conf.d/mysite.template ports: - "8080:80" environment: - NGINX_HOST=foobar.com - NGINX_PORT=80 command: /bin/bash -c "envsubst /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'" mysite.template然后,该文件可能包含如下变量引用: listen ${NGINX_PORT}; 在只读模式下运行Nginx 要以只读模式运行nginx,您需要将Docker卷安装到nginx写入信息的每个位置。默认的nginx配置需要对/var/cache和的写权限/var/run。可以通过如下运行nginx轻松地完成此操作: $ d
### 回答1: nginx作为一个高性能的HTTP服务器,可以用来部署静态资源站点。根据提供的信息来看,nginx部署的静态资源站点可以访问json文件,但不能访问图片资源。 首先,我们需要确保图片资源的路径是正确的,并且这些图片资源存在于nginx配置的静态资源目录下。例如,如果图片资源的路径是`/images/logo.png`,那么这个图片文件应该存在于nginx静态资源目录下的`images`文件夹内。 另外,我们还需要确认nginx的配置文件中是否正确地处理了图片资源的请求。在nginx的配置文件中,通常会使用`location`指令来匹配不同的请求,并将这些请求转发给适当的处理程序。如果我们希望nginx能够正确地处理图片资源的请求,那么配置文件中应该包含类似以下的配置: ``` location /images { root /path/to/static/resource/directory; } ``` 这样,当nginx接收到以`/images`开头的请求,它会将请求转发给指定的静态资源目录。在上面的例子中,“`/path/to/static/resource/directory`”应该替换为实际的静态资源目录路径。 另外一个可能导致不能访问图片资源的原因是权限问题。在确保图片资源存在于正确的路径后,我们还需要确保nginx对这些资源具有读取权限。可以使用`ls -l`命令查看资源的权限设置,并通过`chmod`命令修改权限。 综上所述,要解决nginx部署的静态资源站点无法访问图片资源的问题,我们需要确保图片资源存在于正确的路径,并且nginx的配置文件正确地处理了这些资源的请求。同,还要确保nginx对这些资源具有读取权限。如果这些步骤都正确执行,就应该能够成功地访问图片资源了。 ### 回答2: nginx部署的静态资源站点可以访问json文件,但是访问不了图片资源的问题可能出现在配置的地方。首先,我们需要确定nginx的配置文件中是否正确配置了图片资源的访问。在nginx的配置文件中,通常会配置静态资源的存放路径以及访问规则。 假设静态资源存放在"/var/www/static"目录下,我们需要在nginx的配置文件中添加如下配置: ``` server { listen 80; server_name example.com; location / { root /var/www/static; index index.html; } location ~* \.(json)$ { root /var/www/static; index index.html; } location ~* \.(png|jpg|jpeg|gif)$ { root /var/www/static; index index.html; } } ``` 以上配置中,我们使用了"location"指令来配置不同类型文件的访问规则。第一个"location"块用于配置根路径下的访问规则,指定了根目录为"/var/www/static",以及默认的索引文件为"index.html"。第二个"location"块用于配置json文件的访问规则,同样指定了根目录和索引文件。第三个"location"块用于配置图片资源的访问规则,也指定了根目录和索引文件。 如果还是无法访问图片资源,可能是因为文件路径或名称有误。可以检查一下图片资源文件的存放路径是否和配置文件中的路径一致,以及文件名是否拼写正确。 需要注意的是,在以上配置中,如果json文件和图片资源在同一目录下,可以去掉第二个"location"块,只保留第一个和第三个"location"块即可。此外,如果部署的是HTTPS站点,需要更改监听端口和配置HTTPS相关的参数。 总之,通过正确配置nginx的访问规则,静态资源站点就可以同访问json文件和图片资源了。 ### 回答3: nginx部署的静态资源站点可以通过配置文件将json文件配置为可访问的文件类型,但是对于图片资源需要额外进行一些配置。 首先,确保在nginx配置文件中将json文件设置为可访问文件类型。可以在http或者server部分的location块中添加如下配置: ``` location / { #... #配置可访问的文件类型 types { application/json json; } } ``` 这样就可以访问站点下的json文件了。 而对于图片资源,由于图片资源通常比较大且频繁被访问,为了提高效率,我们需要进行缓存和压缩。在nginx配置文件中添加如下配置: ``` location ~* \.(gif|jpg|jpeg|png)$ { #启用gzip压缩 gzip_static on; #设置缓存间为30天 expires 30d; #配置缓存选项 add_header Cache-Control "public"; } ``` 这样配置后,可以访问站点下的图片资源,并且启用了gzip压缩和缓存,提高了访问速度和性能。 总结:nginx部署的静态资源站点可以访问json文件,只需要在配置文件中将json文件配置为可访问的文件类型。对于图片资源,需要额外进行缓存和压缩的配置,以提高访问速度和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值