hppys 发表于 2024-6-24 18:08:10

使用nginx做代理,nginx的ip映射出另一个IP让两个IP皆访问到OA

1.是当前内部映射出来一个IP,然后使用这个IP做nginx代理proxyHost,我想要它内部环境那个IP也能访问到OA。现在我配置出只有映射出来那个IP能访问到OA,内部IP访问是一直转圈,请问有什么解决办法能让这两个IP一起访问,修改哪个配置文件,比如我现在原IP是192.168.60.30映射出IP为119.91.217.172。

2.这是我OA配置文件

{
"enable": true,
"center": {
    "enable": true,
    "order": 3.0,
    "sslEnable": false,
    "port": 8080.0,
    "httpProtocol": "",
    "proxyHost": "119.91.217.172",
    "proxyPort": 8081.0,
    "###enable": "是否启用###",
    "###order": "center节点顺序,顺序排列0,1,2...###",
    "###sslEnable": "是否启用ssl传输加密,如果启用将使用config/keystore文件作为密钥文件.使用config/token.json文件中的sslKeyStorePassword字段为密钥密码,sslKeyManagerPassword为管理密码.###",
    "###port": "端口,center服务器端口,默认20030###",
    "###httpProtocol": "对外http访问协议,http/https###",
    "###proxyHost": "代理主机,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问地址.###",
    "###proxyPort": "代理端口,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问端口.###",
    "###extension": "扩展设置.###"
},
"application": {
    "enable": true,
    "port": 8080.0,
    "sslEnable": false,
    "proxyHost": "119.91.217.172",
    "proxyPort": 8081.0,
    "includes": [],
    "excludes": [],
    "###enable": "是否启用###",
    "###port": "http/https端口,负责向前端提供数据访问接口.默认为20020端口.###",
    "###sslEnable": "是否启用ssl传输加密,如果启用将使用config/keystore文件作为密钥文件.使用config/token.json文件中的sslKeyStorePassword字段为密钥密码,sslKeyManagerPassword为管理密码.###",
    "###proxyHost": "代理主机,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问地址.###",
    "###proxyPort": "代理端口,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问端口.###",
    "###includes": "承载的应用,在集群环境下可以选择仅承载部分应用以降低服务器负载,可以使用*作为通配符.###",
    "###excludes": "选择不承载的应用,和includes的值配合使用可以选择或者排除承载的应用,可以使用*作为通配符.###",
    "###extension": "扩展设置.###"
},
"web": {
    "enable": true,
    "port": 8080.0,
    "sslEnable": false,
    "proxyHost": "",
    "proxyPort": 8081.0,
    "proxyCenterEnable": true,
    "proxyApplicationEnable": true,
    "proxyTimeOut": 300.0,
    "###enable": "是否启用###",
    "###port": "http/https端口,用户输入网址后实际访问的第一个端口.http协议默认为8080端口,https默认为443端口.###",
    "###sslEnable": "是否启用ssl传输加密,如果启用将使用config/keystore文件作为密钥文件.使用config/token.json文件中的sslKeyStorePassword字段为密钥密码,sslKeyManagerPassword为管理密码.###",
    "###proxyHost": "代理主机,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问地址.###",
    "###proxyPort": "代理端口,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问端口.###",
    "###proxyCenterEnable": "是否启用center服务器代理.###",
    "###proxyApplicationEnable": "是否启用application服务器代理###",
    "###proxyTimeOut": "代理连接超时时间,默认300(秒)###",
    "###extension"


3.这是我nginx配置文件

server {
       listen       8081;
       server_name 119.91.217.172;
       location / {
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
   # proxy_set_header X-NginX-Proxy true;
   # real_ip_header X-Real-IP;
      proxy_connect_timeout 300;
      # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;# 支持websocket连接
      proxy_set_header Connection "upgrade";
      chunked_transfer_encoding off;
      proxy_pass http://192.168.60.33:8080;
       }
   }


想让我192.168.60.30:8080也能访问到OA不是转圈圈。

启蒙星 发表于 2024-6-27 09:25:53

简单一点o2oa和nginx监听端口一样,都设置为8080或者都是8081,这样不要去配置node文件的proxyHost这个值,这样任何能访问nginx的地址都能访问到o2oa,如果端口不一致那需要在portal.json配置urlmapping,可以参考上下文模式配置(上下文没有也可以类似配置):https://www.o2oa.net/cms/serverdeployment/701.html

hppys 发表于 2024-6-27 11:39:28

感谢你解答,就是我采用你说那个上下文模式配置,然后我配置好出现网页端还是转圈圈打不开
1.这是我OA配置文件
{
"enable": true,
"center": {
    "enable": true,
    "order": 3.0,
    "sslEnable": false,
    "port": 8080.0,
    "httpProtocol": "",
    "proxyHost": "",
    "proxyPort": 8080.0,
    "###enable": "是否启用###",
    "###order": "center节点顺序,顺序排列0,1,2...###",
    "###sslEnable": "是否启用ssl传输加密,如果启用将使用config/keystore文件作为密钥文件.使用config/token.json文件中的sslKeyStorePassword字段为密钥密码,sslKeyManagerPassword为管理密码.###",
    "###port": "端口,center服务器端口,默认20030###",
    "###httpProtocol": "对外http访问协议,http/https###",
    "###proxyHost": "代理主机,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问地址.###",
    "###proxyPort": "代理端口,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问端口.###",
    "###extension": "扩展设置.###"
},
"application": {
    "enable": true,
    "port": 8080.0,
    "sslEnable": false,
    "proxyHost": "",
    "proxyPort": 8080.0,
    "includes": [],
    "excludes": [],
    "###enable": "是否启用###",
    "###port": "http/https端口,负责向前端提供数据访问接口.默认为20020端口.###",
    "###sslEnable": "是否启用ssl传输加密,如果启用将使用config/keystore文件作为密钥文件.使用config/token.json文件中的sslKeyStorePassword字段为密钥密码,sslKeyManagerPassword为管理密码.###",
    "###proxyHost": "代理主机,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问地址.###",
    "###proxyPort": "代理端口,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问端口.###",
    "###includes": "承载的应用,在集群环境下可以选择仅承载部分应用以降低服务器负载,可以使用*作为通配符.###",
    "###excludes": "选择不承载的应用,和includes的值配合使用可以选择或者排除承载的应用,可以使用*作为通配符.###",
    "###extension": "扩展设置.###"
},
"web": {
    "enable": true,
    "port": 8080.0,
    "sslEnable": false,
    "proxyHost": "",
    "proxyPort": 8080.0,
    "proxyCenterEnable": true,
    "proxyApplicationEnable": true,
    "proxyTimeOut": 300.0,
    "###enable": "是否启用###",
    "###port": "http/https端口,用户输入网址后实际访问的第一个端口.http协议默认为8080端口,https默认为443端口.###",
    "###sslEnable": "是否启用ssl传输加密,如果启用将使用config/keystore文件作为密钥文件.使用config/token.json文件中的sslKeyStorePassword字段为密钥密码,sslKeyManagerPassword为管理密码.###",
    "###proxyHost": "代理主机,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问地址.###",
    "###proxyPort": "代理端口,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问端口.###",
    "###proxyCenterEnable": "是否启用center服务器代理.###",
    "###proxyApplicationEnable": "是否启用application服务器代理###",
    "###proxyTimeOut": "代理连接超时时间,默认300(秒)###",
    "###extension"

2.这是我portal.json配置
{
      "indexPage": {
                "enable": false,
                "portal": "",
                "page": "",
                "###enable": "是否启用定制的首页面.###",
                "###portal": "指定首页面所属的portal,可以用id,name,alias.###",
                "###page": "指定的首页面,可以使用name,alias,id###",
                "###extension": "扩展设置.###"
      },
      "loginPage": {
                "enable": true,
                "portal": "f4fbfb29-98ae-45c5-a9ac-a4d141048978",
                "page": "",
                "###enable": "是否启用定制登录页面.###",
                "###portal": "指定登录页面所属的portal,可以用id,name,alias.###",
                "###page": "指定的登录页面,可以使用name,alias,id###",
                "###extension": "扩展设置.###"
      },
      "urlMapping": {
    "119.91.217.172/": "119.91.217.172/o2oa"
      },
      "###indexPage": "定制首页面设置.###",
      "###loginPage": "定制登录页面设置.###",
      "###extension": "扩展设置.###"
}

3.这是我nginx配置文件
upstream o2Server {             # Server: 分发名
       server 119.91.217.175:8080;      # 我是先采用单台OA跑看看能不能跑通这个服务
   }

      server {
       listen       8081;
       server_namelocalhost;
       proxy_http_version 1.1;
      proxy_read_timeout 300s;
      proxy_set_header Upgrade $http_upgrade;# 支持websocket连接
      proxy_set_header Connection "upgrade";    # 支持websocket连接
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header REMOTE-HOST $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       location / {
       root   html;
       indexindex.html;
      proxy_pass http://o2Server/;
       }
   }
}

是我哪里没有配置对吗这样配好访问时会一直出现转圈

启蒙星 发表于 2024-7-1 14:34:49

你nginx监听的是8081,o2oa是8080,你配置的urlmapping映射不对,你可以这样配置(其中119.91.217.172要是nginx访问地址,如果有多个ip或者域名,那urlmapping继续加):
"urlMapping": {
    "119.91.217.172:8080/": "119.91.217.172:8081/o2oa",
    "119.91.217.172:8081/": "119.91.217.172:8081/o2oa"
}
页: [1]
查看完整版本: 使用nginx做代理,nginx的ip映射出另一个IP让两个IP皆访问到OA