nginx 도메인 이름 설정 후 2단계 디렉터리에서 다른 항목에 접근하는 설정 작업

장면 설명:
2급 디렉터리(가상 디렉터리, 응용 프로그램)의 방식으로 같은 ip+ 포트의 다른 응용 프로그램에 접근한다. 예를 들어location은 사용자가 사용하는 페이지이고location/admin/는 관리 페이지이고location은 192.168.1.100의 80 포트에 배치되고location/admin은 172.20.1.32의 8080 포트에 배치된다.
솔루션:
nginx 역방향 프록시를 사용하여 다음과 같이 구성합니다.

server {
    listen 80;
    server_name demo.domain.com;
    # service 
  location /service {
      #DemoBackend1 , service 404
      proxy_pass   http://DemoBackend1/;
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    # 
    location / {
      proxy_pass http://DemoBackend2;
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }
 
# 
upstream DemoBackend1 {
   server 192.168.1.1;
   server 192.168.1.2;
   ip_hash;
 }
upstream DemoBackend2 {
   server 192.168.2.1;
   server 192.168.2.2;
   ip_hash;
}
그러나 이런 방식으로 2급 디렉터리의 스타일 파일이 정상적으로 표시되지 않습니다. 그들은 자동으로 2급 디렉터리에서 찾지 않고 루트 디렉터리에서 찾습니다. 페이지를 돌릴 때도 404 오류를 보고합니다.설정이 잘못되었는지 서버 블록에 루트나 Rewrite를 설정해도 해결할 수 없습니다.
프록시에서_pass 뒤에 2급 디렉터리를 추가하고 location 블록의 2급 디렉터리와 같이 다음과 같이 설정합니다.

server {
    listen 80;
    server_name demo.domain.com;
    # service 
  location /service {
      #DemoBackend1 , service 404
      proxy_pass   http://DemoBackend1/service;#DemoBackend1 service , location 
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    # 
    location / {
      proxy_pass http://DemoBackend2;
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }
 
# 
upstream DemoBackend1 {
   server 192.168.1.1;
   server 192.168.1.2;
   ip_hash;
 }
upstream DemoBackend2 {
   server 192.168.2.1;
   server 192.168.2.2;
   ip_hash;
}
문제 해결
그리고 실제 응용에서 나는 asp를 사용했다.net의 mvc는 mvc를 사이트로 설정하는 방식에 문제가 없다. 가상 디렉터리 방식이면 경로를 찾을 수 없다. 왜냐하면 자신이 사이트에 있는 주소가 규범에 맞지 않기 때문이다. 정확한 방식은 다음과 같다.
Here's a typical example of what you should never do:

<script type="text/javascript">
  $.ajax({
    url: '/home/index'
  });
</script>
and here's how this should be done:

<script type="text/javascript">
  $.ajax({
    url: '@Url.Action("index", "home")'
  });
</script>
Here's another typical example of something that you should never do:

<a href="/home/index" rel="external nofollow" >Foo</a>
and here's how this should be written:

@Html.ActionLink("Foo", "Index", "Home")
Here's another example of something that you should never do:

<form action="/home/index" method="opst">

</form>
and here's how this should be written:

@using (Html.BeginForm("Index", "Home"))
{

}
보충 지식:nginx 서버를 사용하여 같은 IP와 같은 포트에서 서로 다른 프로젝트에 접근하고 도메인 이름으로 구분하여 접근하는 프로젝트를 실현
여기에서 나는nginx 서버 두 대를 사용했는데, 한 서버는 서로 다른 항목을 서로 다른 포트에 연결하고, 한 서버는 서로 다른 도메인 이름을 서로 다른 포트의 프로젝트에 나누어 주었다.
첫 번째 nginx의 conf 파일 서버 부분:

server {
    listen    8000;
    server_name localhost;
    root  E:/test/pro1;
    location / {
      index  index.html index.htm; 
    }
  }

  server {
    listen    8001;
    server_name localhost;
    root  E:/test/pro2;
    location / {
     index  index.html index.htm;  
    }
  }
두 번째 nginx의 conf 파일의 서버 부분:

server {
    listen    80;
    server_name www.testpro01.com testpro01.com;
    location / {
      proxy_pass  http://127.0.0.1:8000;
    }
  }

  server {
    listen    80;
    server_name www.testpro02.com testpro02.com;
    location / {
     proxy_pass  http://127.0.0.1:8001/;
    }
  }
마지막으로bat 파일로 두 개의nginx 서버를 조작합니다
시작 파일은 다음과 같습니다. start.bat

@echo off
echo [start...]
cd /d E:
cd spiovnet
ginx-1.16.1 call start nginx.exe cd /d D: cd nginx-1.16.1 call start nginx.exe echo [end...] @pause
다른 뇌동은 명령만 다르다
nginx 시작 명령:start nginx.exe 또는nginx
nginx 다시 불러오기 설정 명령:nginx -s reload
ngin 재부팅 명령:nginx -s reopen
ngin 닫기 명령:nginx -s stop
이상의 이nginx가 도메인 이름을 설정한 후 2급 디렉터리가 서로 다른 프로젝트에 접근하는 설정 작업은 바로 편집자가 여러분에게 공유한 모든 내용입니다. 여러분께 참고가 되고 저희를 많이 사랑해 주시기 바랍니다.

좋은 웹페이지 즐겨찾기