部署项目遇到的问题汇总
部署项目遇到的问题汇总
问题一:nginx部署完成后,访问后端的接口返回CORS跨域请求
思考:我部署的前后端都在同一个宿主机上,访问的ip都是相同的,不应出现跨域才对。
解决:当你的nginx有如下配置(该配置通常用于本地开发环境)
server { listen 80; server_name xxx.aliyun.com; location / { root html; index index.html index.htm; proxy_pass http://127.0.0.1:8080; } }
线上环境下:
你会发现spring boot tomcat server
接受到的post请求url的host信息是http://127.0.0.1
,但是请求的origin信息是http://xxx.aliyun.com
。 此两者不一致,spring boot tomcat server
返回403
状态码和Invalid CORS request
内容。
修复方法1:
nginx里添加配置:proxy_set_header Host $host;
server { listen 80; server_name xxx.xxx.xxx.xxx; location / { root html; index index.html index.htm; proxy_set_header Host $host; proxy_pass xxx.xxx.xxx.xxx:6666; } }
这时spring boot tomcat server
接受到的post请求url的host信息就不是127.0.0.1了
解决来源:
链接:https://www.jianshu.com/p/99b2534c7737
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
问题二:nginx同时部署两个前端项目
需求:项目中有前台的前端和后台管理端的前端两个项目,都需要部署在同一个nginx中,并使用不同的二级域名访问如
front.xxx.com admin.xxx.com
解决:
①在nginx目录下的ntml目录下建两个文件夹,分别存放两个项目的打包后的文件
②在nginx配置文件中配置两个server,可以使用相同的端口,但是server_name一定要区分开
#user root; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; charset utf-8; server_name front.xxx.com; #前台项目 location / { root /usr/share/nginx/html/dist;#注意当前项目的地址 try_files $uri $uri/ /dist/index.html;#注意当前项目的地址 index index.html index.htm; error_page 405 =200 $request_uri; } location /api { proxy_pass http://112.xxx.xx.35:6666; proxy_set_header Host $host; proxy_redirect default; rewrite ^/api/(.*) /$1 break; } } server { listen 80; charset utf-8; server_name admin.xxx.com; #后台管理系统 location / { root /usr/share/nginx/html/static;#注意当前项目的地址 try_files $uri $uri/ /static/index.html;#注意当前项目的地址 index index.html index.htm; error_page 405 =200 $request_uri; proxy_pass http://112.xxx.xx.35:6666; proxy_set_header Host $host; proxy_redirect default; rewrite ^/api/(.*) /$1 break; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
问题三:nginx访问ftp服务器下的静态文件
需求:使用FTP文件服务器作为静态页面的存放位置,但是nginx要怎么才能访问到里面的静态html文件呢?
解决:
①docker-compose.yml文件中的nginx挂载
这里的/home/ftp/root是ftp文件服务器在宿主机中的根目录
这里的/var/local是nginx服务的虚拟容器中的存放静态页面的地址
②nginx配置文件中配置/ftp路径的映射地址
location /ftp/ { alias /var/local/root/webpages/;#ftp服务器中的文件映射nginx中的位置【前提是要在nginx的挂载那里要挂载该目录】 autoindex on; }
③修改项目中访问静态页面的地址:ip+路径映射+文件的相对根目录的路径
export const STATIC_PAGE_BASE_URL = "http://112.124.55.35/ftp/staticPages/"
路径拼接逻辑:
大功告成??
no!虽然不是404了,但是变成了403!这是因为权限不够,需要在nginx.cnf文件顶部加一行
完成!
本文来自博客园,作者:wfxx,转载请注明原文链接:https://www.cnblogs.com/wufaxiang/p/17287099.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)