热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在阿里云、微软WindowsAzure、亚马逊AWS上使用Nginx配置http正向代理服务器

作为一个完全的Linux和Nginx双料白痴,我觉得有必要把这几天的折腾整理一下,以备以后查看。首先我接到的是5台安装好Linux的云主机,两台阿里云,两台Azure和一台AW

作为一个完全的Linux和Nginx双料白痴,我觉得有必要把这几天的折腾整理一下,以备以后查看。

首先我接到的是5台安装好Linux的云主机,两台阿里云,两台Azure和一台AWS。(包括云主机IP,主机名,用户名和密码)

我要做的事情:

第一步:登录云主机。

网上查很多人推荐使用Putty,这里我们老大推荐我是使用X Manager Enterprise 4。

安装好以后打开

技术分享

运行xshell,建立一个新连接。点击菜单栏File中的“New”,打开新建会话窗口,在窗口右侧“Name”中填入”主机名“,“Host”中填入“云主机IP”,其他保持默认,点击“OK”。

技术分享

点击OK后会弹出如下窗体,并多出一个选项(红框中)

技术分享

双击上图红框中的新增项弹出

技术分享

输入用户名,为了方便下次直接进入,选上记住用户名复选框。点击OK。窗体消失。选择File—Open弹出以下窗体

技术分享

双击刚才的新增项,弹出以下窗体

技术分享

填入密码,选择记住密码,点击OK。登录成功。

技术分享

说明:登录云主机有两种方式,一个是上面说的用户名密码方式,另一种是公钥,私钥的方式。为了方便运维的同学帮我将这5太云主机的远程登录方式都改成了用户名密码方式。如果选择公钥私钥方式,是没有办法输入密码的。

第二步:查看当前Linux版本信息。

因为本小白从网上查得配置nginx大多是基于某一版本的Linux的,所以我就想了解下本与主机的Linux版本。

使用命令:lsb——release -a

技术分享

我这里安装的是CenOS 6.5。据说CenOS也是服务器端使用的最多的Linux版本。

第三步:安装Nginx。

Nginx的安装方式有编译安装,yum安装等,这里我们老大要求使用yum安装的方式。

首先需要检查一下,云主机里有没有Nginx安装文件。

命令:yum list | grep nginx

技术分享

如上图所示,我的cenos 里是有nginx安装包的(因为我已经安装完了,不可能没有啊,哈哈)

说明:经查找 ,我的的两台阿里云里有nginx安装包,Azure和AWS中没有,不知道阿里云中的是不是运维同学帮忙下好的。而且有的安装教程上第一步是yum update,yum uodate的作用是升级现有的软件和内核。可以不升级,AWS上的Linux版本跟其他4台不一样是Red Hat6.6,我不确定是不是运行了yum update造成的。

如果主机中有nginx安装文件,运行命令:yum install nginx


如果主机中没有nginx安装文件,运行命令:yum install http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

安装完成后运行:service nginx start 会显示[OK]的字样。


最后在浏览器输出ip 测试一下,如果出现nginx 的欢迎页面,代表已经成功了。

如果不成功,运行sudo nginx -t 查看配置文件是否有错,如没错会出现:
技术分享

说明:这一命令需要root权限才能正确执行,所以前面加sudo 点击回车后会提示输入密码,重新输入密码即可。

如果配置文件有问题,怎根据提示修改配置文件,或者查看错误日志。不过一般情况下新安装的nginx配置文件没有修改过,不会有问题,只有修改过的才可能出错。

(CenOS6.5下安装的nginx默认主配置文件的路径是: sudo vi /etc/nginx/nginx.conf sudo是以root权限运行 vi是编辑器,后面我会介绍用到的vi中的几个命令。)
既然配置文件基本不会出错,如果看不到欢迎界面的话,有可能是防火墙的问题。
关闭防火墙 命令:sudo service iptables stop

至此,Nginx已经全部配置安装完成。

第四步:配置Nginx http正向代理

首先找到主配置文件,上文中提到过 sudo vi /etc/nginx/nginx.conf
技术分享
这是用vi编辑器打开,点“i”进入编辑状态,否则看不全,一直下拉会找到红框中的文件路径,这个路径下的文件就是我们要配置的文件。
复制路径/etc/nginx/conf.d/ 退出编辑器。下面我说一下这里用到的几个vi编辑器中命令。
1、i --进入编辑状态
2、Esc --退出编辑状态
3、:q --在没有修改的情况下退出vi
4、:q! --修改了,但是不想保存,强行退出
5、:wq --修改了,保存并退出

现在我们要找到的是修改的文件 命令: 
1、cd /etc/nginx/conf.d/ --进入conf.d文件夹
2、ls -lsh --ls是查看文件夹下的所有文件, -lsh是显示文件属性 并按照时间排序。这里可以只用 ls
技术分享
3、我们要修改的是default.conf 进入这个文件的编辑状态:sudo vi default.conf
技术分享
4、点i进入编辑状态(一下内容部分引自网络)
一,Nginx 正向代理配置文件:
server {
    resolver 8.8.8.8;
    resolver_timeout 5s;
    listen 8090;
    location / {
        proxy_pass $scheme://$host$request_uri;
        proxy_set_header Host $http_host;
        proxy_buffers 256 4k;
        proxy_max_temp_file_size 0;
        proxy_connect_timeout 30;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 301 1h;
        proxy_cache_valid any 1m;
    }
}
二,Nginx 正向代理配置说明(以上没有显示内容,注释掉即可):
1,配置 DNS 解析 IP 地址,比如 Google Public DNS,以及超时时间(5秒)。
resolver 这里你要改成你们DNS服务器的IP (查看dns的命令:cat /etc/resolv.conf);
resolver_timeout 5s;
说明:如果自己dns服务器对应的ip不止一个,网上的解决方案是两个ip并排,用空格分开,如resolver 8.8.8.8  9.9.9.9; 但是我试过是不行的,现在我只绑定了一个IP,如果谁有解决办法,希望能得到您的指点。
对于listen 8090; 这个是端口是自己制定的,阿里云我用的是80 ,微软云和aws我用的是8090.值得一提的是阿里云这些端口是默认开放的,而微软与和AWS默认只开放了22端口,如果用到其他的端口,需要请运维帮忙开通。

2,配置正向代理参数,均是由 Nginx 变量组成。其中 proxy_set_header 部分的配置,是为了解决如果 URL 中带 "."(点)后 Nginx 503 错误。

proxy_pass $scheme://$host$request_uri;
proxy_set_header Host $http_host;
3,配置缓存大小,关闭磁盘缓存读写减少I/O,以及代理连接超时时间。

proxy_buffers 256 4k;
proxy_max_temp_file_size 0;
proxy_connect_timeout 30;
4,配置代理服务器 Http 状态缓存时间。

proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
三,不支持代理 Https 网站
因为 Nginx 不支持 CONNECT,所以无法正向代理 Https 网站(网上银行,Gmail)。
如果访问 Https 网站,比如:https://www.google.com,Nginx access.log 日志如下:

"CONNECT www.google.com:443 HTTP/1.1" 400


第五步:添加nginx身份验证

身份验证一般有两种方式,一种是使用ssl 443即证书的方式,另一种是使用htpasswd的方式,这里为了方便我选择后者。

最后的效果就类似(不同浏览器的界面有所不同):

技术分享

如果认证失败,就会报HTTP错误:401 Authorization Required。

要实现这样的功能,就需要更改服务器的配置,并设定好用于登录的用户名和密码。

首先我们需要更改网站的Nginx的server配置,我们找到刚才配置正向代理的那个配置文件,在lication中添加两行如下:

cd /etc/nginx/conf.d/
sudo vi default.conf
server {
# ...
location / {
# 添加下面两行
auth_basic "Restricted"; (Restricted为出错后的提示语)
auth_basic_user_file  proxy.pwd; (proxy.pwd是秘钥文件的文件名,这里应为秘钥文件的完整路径,如下图)
# ...
}
# ...
}
技术分享

接下来需要创建htpasswd文件,这里有一些细节需要注意:

htpasswd的路径
和nginx.conf在同一级目录即可。CentOS服务器的话一般就在/etc/nginx/下面。

htpasswd的内容
每一行为一个用户,格式为username:password。但是要注意,这里的password不是明文,而是将password进行crypt(3)加密后的字符串。

你可以使用一段PHP代码来生成htpasswd中的password: 也可以使用网上的现在生成工具(不推荐),我的文件是老大直接给我的Python生成的。
// 密码明文
$password = ‘some password‘;
// 对密码进行加密
$password = crypt($password, base64_encode($password));
// 获得加密后的密码
echo $password;

然后将字符串写入htpasswd文件中:


username1:xucqMk13TfooE
username2:YXTfb3xWKOMBM
...


htpasswd的权限

需要更改htpasswd文件的权限,执行如下命令: 

sudo chown root:www-data htpasswd
sudo chmod 640 htpasswd 


当上面的准备工作都做好之后,我们就可以重新载入或者重启Nginx服务器了: 

sudo /etc/init.d/nginx reload 

说明:密码文件导入的方法有很多,可以通过Xmanager Enterprise 4中的Xftp,还可以使用pscp.exe,如果倒不进去的话还有最原始的办法,在/etc/nginx/ 下新建文件proxy.pwd 然后将秘钥中的文本考进去即可。













在阿里云、微软Windows Azure、亚马逊AWS 上使用Nginx配置http正向代理服务器


推荐阅读
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
  • 微软推出Windows Terminal Preview v0.10
    微软近期发布了Windows Terminal Preview v0.10,用户可以在微软商店或GitHub上获取这一更新。该版本在2月份发布的v0.9基础上,新增了鼠标输入和复制Pane等功能。 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 在使用Eclipse进行调试时,如果遇到未解析的断点(unresolved breakpoint)并显示“未加载符号表,请使用‘file’命令加载目标文件以进行调试”的错误提示,这通常是因为调试器未能正确加载符号表。解决此问题的方法是通过GDB的`file`命令手动加载目标文件,以便调试器能够识别和解析断点。具体操作为在GDB命令行中输入 `(gdb) file `。这一步骤确保了调试环境能够正确访问和解析程序中的符号信息,从而实现有效的调试。 ... [详细]
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 自定义滚动条美化页面内容
    当页面内容超出显示范围时,为了提升用户体验和页面美观,通常会添加滚动条。如果默认的浏览器滚动条无法满足设计需求,我们可以自定义一个符合要求的滚动条。本文将详细介绍自定义滚动条的实现过程。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • 在Delphi7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本。定义如下:1234 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
author-avatar
m71051588
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有