单位因安全需要就一个IP和有限的端口对外开放,疫情期间要访问不同的服务器,就只能远程跳转;访问内网中不同端口的web服务,相当麻烦,于是想到了用nginx来做访问转发到不同的内网服务器。
(1)下载nginx,服务器是windows于下载windows版
下载地址:http://nginx.org/en/download.html
![56eaf5023abe49cdd72bb758151facd9.png](https://i-blog.csdnimg.cn/blog_migrate/e03c4c7a6ec56a47f0b0d8bd79b56922.png)
(2)服务器上解压,并起动服务。注意nginx是默认是80端口,因此把所有占用80的端口的web服务停用,比如:iis、apache等修改为其他端口。
cmd---定位到刚解压的目录---启动服务
![634967b12bb5157ad31792189744835d.png](https://i-blog.csdnimg.cn/blog_migrate/6adf7e992a31c4657d64c1d00cbce000.png)
起动:start nginx
![96c70d4b1a60a9bc4c18ef26ec5f3fab.png](https://i-blog.csdnimg.cn/blog_migrate/9ed3bc2326aac69bfa839c05ad9eb765.png)
(3) 开始配置。打开:conf/nginx.conf文件,进行配置
注意:windows系统的名称域名不要用_,可用.、-一类都可以,linux系统不影响。在这里踩过坑,解决了很长时间。报的错误如下:
Invalid HTTPHOST header: 'server_default'. The domain name provided is not valid according to RFC 1034/1035.
a、添加默认域名访问时直接跳转到本机的8088端口:
在server{ 之前添加:
#跳转到本机8088端口
upstream server.default {
ip_hash;
server 127.0.0.1:8088;
}
# 如果域名后添加/examd后缀,则跳转到内网另一台服务器
upstream server.exame {
server 10.84.100.191:80;
}
在server {中添加:
listen 80;
server_name "你的域名";
#charset koi8-r;
#access_log logs/host.access.log main;
location / { #默认跳转到
proxy_pass http://server.default;
add_header backendIP $upstream_addr;
access_log off;
proxy_redirect off;
client_max_body_size 5000m;
##add_header X-Frame-Options SAMEORIGIN;
}
(b)如果访问:域名/exame,则跳转到10.84.100.191:80
upstream的配置见a项中的相关配置
server{里添加:
location /exame {
proxy_pass http://server.exame;
add_header backendIP $upstream_addr;
access_log off;
proxy_redirect off;
client_max_body_size 5000m;
##add_header X-Frame-Options SAMEORIGIN;
}
保存配置后要重新启用配置,启用的命令是:
nginx -s reload
(4)nginx的其他命令
关闭: nginx -s quit
使用过程中一些问题的解决方案补充:
1、修改配置文件后,nginx -s reload后,配置不生效
这是因为不小心多次运行了start nginx,出现了6个nginx的进程,关闭命令只能关闭一个。所以配置不生效。在进程管理中把所有进程关闭。再重起即可。
2、504 Gateway Time-out
有一系统的认证是需要通过CAS认证,认证过程非常慢,通常会超过60秒,则会出现此提示,解决方法,在配置文件中添加:
location / {
proxy_pass IP地址;
add_header backendIP $upstream_addr;
access_log off;
proxy_redirect off;
proxy_read_timeout 3600; #超时设置
}
3、同一域名要根据链接,到不同服务器:
server {
listen 80;
server_name 域名;
location /ftedu-video-hls { #此链接到视频服器
types{
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
proxy_pass http://server-video;
access_log off;
add_header Cache-Control no-cache;
add_header Access-Control-Allow-Origin *;
}
location / { #默认到web应用服务器
proxy_pass web服务器;
add_header backendIP $upstream_addr;
access_log off;
proxy_redirect off;
proxy_read_timeout 3600; #超时设置
}
}
4、今天在上传一个大文件发现Nginx报错了:nginx 413 Request Entity Too Large
添加上下面加粗的代码即可。
location / {
proxy_pass XXXXX;
proxy_set_header Host $host:$server_port;
access_log off;
proxy_redirect off;
proxy_read_timeout 3600; #超时设置
client_max_body_size 5000m; # 文件上传的最大值
}