Nginx进行反向代理多个web项目

反向代理:

客户端(浏览器)不直接访问目标服务器,而是通过代理服务器进行访问,
可以不暴露目标服务器实际IP。

出现nginx css,js静态资源无法访问,nginx 404相关都可以参考以下配置
主要修改nginx.conf文件
这里我们先启动两个服务:

web1: 8001/; src(项目目录):/usr/workspace/pc;
web2:8080/admin/;src(项目目录): /usr/workspace/shiroSSO;
我们对外只暴露80端口,所以实际访问http://www.simonjia.top:8001/


因为防火墙没有开通8001端口,所以直接访问8001,无法访问;
访问域名可以:

这里就起到反向代理的作用。
刚开始部署时发现css和js文件实际请求地址变成了127.0.0.1(部署多个项目,可根据项目名称进行正则匹配)

原因是没有在location中添加 proxy_set_header Host $host;
将代理的host主机地址变成域名实际地址,而不是本地的127.0.0.1;
如果nginx出现404错误,请注意alias /usr/workspace/pc;
配置alias对应项目的实际路径。
从配置文件中可以看到web2的实际访问路径为:
http://www.simonjia.top/admin/login.html
因为在https中也进行相关配置,所以
https://www.simonjia.top/admin/login.html 也可以访问。
打开rewrite ^(.*) https://$server_name$1 permanent;这点注释,可以自动http跳转到https中。

cd /usr/local/nginx/conf
vim nginx.conf
#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  102400;
}


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;

    #gzip  on;

    server {
        listen       80;
        server_name www.simonjia.top ;#服务器域名
	#rewrite ^(.*) https://$server_name$1 permanent; #这句是代表 把http的域名请求转成https
        #charset koi8-r;
		error_log   /logs/nginx-error.log info;
        access_log  /logs/host.access.log  main;
        location / {
            #root   /usr/tools/nignx/nginx-1.9.9/web;
			alias /usr/workspace/pc;
            #index  index.html index.htm;
	        #proxy_pass  http://www.simonjia.top; #因为这里还是80端口,所以保持http就可以
			proxy_pass http://127.0.0.1:8001/;#代理的实际端口,在本地8001
			proxy_set_header Host $host;# 代理请求信息,转换为实际域名地址
		    proxy_set_header X-real-ip $remote_addr;
		    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		    proxy_connect_timeout 15s;
        }
	      #8080管理后台
          location /admin/ {
		    alias /usr/workspace/shiroSSO;
                     proxy_pass http://127.0.0.1:8080/admin/;
                     proxy_set_header X-real-ip $remote_addr;
                     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                     proxy_connect_timeout 15s;
         }
		 #配置静态资源 解决js css文件无法加载无法访问的问题,注意末尾不能有 /
			#正则匹配css文件,防止css:404
			#多个项目css文件,可以根据项目路径进行匹配
          location ~ .*(/admin).*.(js|css|jpg|jpeg|gif|png|ico|pdf|txt)$ {
                      proxy_pass http://127.0.0.1:8080; #匹配实际端口地址(不需要加入项目名)
					  
                     }
		 location ~ .*.(js|css|jpg|jpeg|gif|png|ico|pdf|txt)$ {
		   proxy_pass http://127.0.0.1:8001;
		 }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 
    }

 

    # HTTPS server 这里是配置ssl证书,需添加对应ssl模块
    #
    server {
        listen       443 ssl;
        server_name  www.simonjia.top;

       ssl_certificate      /usr/tools/nignx/ssl/xx.crt; #添加ssl证书
       ssl_certificate_key  /usr/tools/nignx/ssl/xx.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;
      	  #  proxy_pass   https://www.simonjia.top;
        }
		#8080管理后台
          location /admin/ {
		    alias /usr/workspace/shiroSSO;
                     proxy_pass http://127.0.0.1:8080/admin/;
                     proxy_set_header X-real-ip $remote_addr;
                     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                     proxy_connect_timeout 5s;
         }
		#配置静态资源 解决js css文件无法加载无法访问的问题,注意末尾不能有 /
          location ~ .*.(js|css|jpg|jpeg|gif|png|ico|pdf|txt)$ {
                      proxy_pass http://127.0.0.1:8080;
                     }
    }

}

cd /usr/local/nginx/sbin
./nginx -s reload

重新加载nginx配置文件,热部署,不用重启。

原文地址:https://www.cnblogs.com/SimonHu1993/p/13354373.html