一、背景
在银行的内网环境,需要把文件传送到外网,但是走行内正式的审批流程,效率很低。目前已经申请了外网域名,通过nginx可以访问到内网的服务器,因此思考,通过这个外网域名借道,在内网linux上搭建一个外网可以访问的文件服务器。
二、环境检查
登录监听域名的nginx服务器,通过命令
python --version
可知当前服务器已经安装了python的2.7.5版本
三、步骤实施
1.修改nginx配置
进入nginx的配置文件(一般是nginx.conf),在监听域名的http模块下,新增server配置:
server {
listen 80;
server_name your_external_domain.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
1.其中your_external_domain.com 替换为你的外部域名,或者外部域名转发到的服务器路径
2.proxy_pass 是你的文件服务器地址,例如localhost:8080表示你在nginx的服务器启动,且启动端口是8080
3.这里的/表示根目录文件,你可以指定其它,例如/app,但是一定要保证该服务器上存在该路径,我刚开始不知道,随便设置了个/file,结果服务器/根目录下 ,根本没有这个文件夹,客户端访问就一直报错,404路径不存在;后来通过在服务器上curl http://localhost:8080/,查看根目录,nginx改成/app后才好的
2.python启动文件服务器
python的2.7.5版本通过命令
python -m SimpleHTTPServer 8080 /path/to/your/directory
启动文件服务器,
1.其中/path/to/your/directory 用来设置为文件服务器的根目录路径,可以不写。如果在启动 Python 2.7.5 的文件服务器时没有指定根目录路径,那么文件服务器将默认使用当前工作目录作为根目录。换句话说,如果没有指定路径,文件服务器将会将当前工作目录作为根目录,并提供该目录下的文件内容。
2.启动的ip和端口,要和nginx配置中指定的proxy_pass对应,我这里是对应的是http://localhost:8080
3.常见错误解决
1.404 not Found
通常是你访问的url,在你的nginx里面不存在,检查nginx.conf中location 的配置信息,确认访问的url可以匹配到。
2.404 Nothing matches the givens URI
404 Nothing matches the givens URI.根据报错信息可以明确的知道,你访问的请求已经到达了文件服务器了,但是文件服务器根目录下并没有该路径,通过在文件服务器机器上curl http://localhost:8080/,(8080改成你自己文件服务器启动的端口),可以找到你的文件服务器有哪些可以访问的路径,如图示例:
因为浏览器访问的/ng/file 并不在图中的href值中,因此返回404,此时python的文件服务器日志,也会显示404。浏览器访问的路径一定要是文件服务器根目录下的路径,或者其子路径。