1、linux服务器,启动多个nginx进行服务代理
假设一台linux服务器代理2套系统,只需要配置2个nginx.conf就可以了。
1)配置第一个nginx实例
打开 /etc/nginx/conf/nginx.conf 文件,找到 listen 参数并修改端口。例如,将第一个实例的HTTP端口改为8080:
server {
listen 8080;
...
}
2)配置第二个nginx实例
复制/etc/nginx/conf/nginx.conf将nginx.conf 改成nginx2.conf,找到listen参数并修改端口。例如,将第二个实例的HTTP端口改为9090:
server {
listen 9090;
...
}
3)启动如上2个实例
①启动第一个实例
/etc/nginx/sbin/nginx -c /etc/nginx/conf/nginx.conf -p /etc/nginx
①启动第二个实例
/etc/nginx/sbin/nginx -c /etc/nginx/conf/nginx2.conf -p /etc/nginx
4)关闭实例
/etc/nginx/sbin/nginx -c /etc/nginx/conf/nginx2.conf -p /etc/nginx -s stop
2、nginx代理前端配置
location / {
expires 365d;
root ../../apps/client-web;
index index.html index.htm;
# 浏览器刷新避免404问题
try_files $uri $uri/ /index.html;
add_header 'Access-Control-Allow-Origin' '*';
if ($request_filename ~ .*\.(html|htm)?$) {
add_header Cache-Control "private,no-store,no-cache,must-revalidate,proxy-revalidate";
}
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET,POST,PUT,DELETE,PATCH,OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Range,Range';
add_header 'Access-Control-Max-Age' 1728000;
return 204;
}
}
解析:
1.
location / { ... }
:这段配置指定了匹配根路径 / 的位置块。即当客户端请求的路径是根路径时,将会按照这个配置处理请求。
2.expires 365d;
:设置浏览器缓存的过期时间为365天。这意味着客户端在访问这个位置的资源时,将会缓存这些资源,并在一年后过期。
3.root ../../apps/client-web;
:指定了根目录的路径为 …/…/apps/client-web。这意味着 Nginx 将在文件系统中找到请求的文件或目录。
4.index index.html index.htm;
:指定默认的索引文件为 index.html 或 index.htm。如果客户端请求的是一个目录,Nginx 将会尝试返回这些文件作为默认页面。
5.try_files $uri $uri/ /index.html;
:当请求的文件或目录不存在时,会尝试寻找 u r i 、 uri、 uri、uri/,或者最终返回 /index.html,这样可以避免浏览器刷新时出现404错误。
6.add_header 'Access-Control-Allow-Origin' '*';
:设置允许跨域请求的来源为任意域名,这允许其他域名的前端页面通过 AJAX 请求访问这个服务。
7.if ($request_filename ~ .*\.(html|htm)?$) { ... }
:如果请求的文件名以 .html 或 .htm 结尾,将会添加特定的缓存控制头,以确保浏览器不会缓存这些文件。
8.if ($request_method = 'OPTIONS') { ... }
:如果请求方法是 OPTIONS,则设置 CORS 相关的响应头,以允许预检请求(preflight request)通过,并返回状态码 204。注意事项:
- 在使用 if 指令时要小心,因为它可能会影响性能,并且有时候 if 指令在 Nginx 中的使用并不推荐,特别是在高负载情况下。
- 确保根目录 …/…/apps/client-web 的权限设置正确,以免出现文件访问权限问题。
- 配置中的 CORS 头部设置允许了广泛的请求来源和方法,确保这是你的应用程序设计所需的安全策略。
3、页面点击没链接没问题,刷新页面报404
针对上述情况,只需要在配置里面加下面这行命令就可以了,这行代码在上面配置中有写到。
try_files $uri $uri/ /index.html;