NGINX安装与配置

一、下载NGINX源码

下载网址:http://nginx.org/download/(历史版本)

http://nginx.org/en/download.html(稳定版本、历史版本、最新版本)

NGINX三大版本:
Mainline version(主线版本)
Stable version(稳定版本)
Legacy versions(历史/传统版本)

二、编译

Nginx依赖一些组件,需要提前安装好。下面是源码编译nginx时,需要安装的一些组件。

​ OpenSSL 提供了一个强大且安全的套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL协议,并提供丰富的应用程序供测试或其它目的使用。 ​
nginx 不仅支持 http 协议,还支持https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。 ​ > PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的http 模块> 使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre开发的一个二次开发库。

​zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行压缩

yum install openssl openssl-devel pcre pcre-devel zlib-devel gcc gcc-c++

​ 依赖组件安装好后,就可以开始编译Nginx了。解压Nginx压缩包,进入到目录,执行千篇一律的编译命令。

./configure --with-http_ssl_module \  # 支持ssl
--with-pcre \    # 支持正则
--with-http_gzip_static_module \   # 压缩
--with-http_v2_module
​ 如果需要使用ssl模块,在configure时添加ssl模块。
./configure --with-http_ssl_module
make && make install  # make 在编译时,可以根据服务器的核心数,进行更改编译的线程数,例如,四核心的机器:make -j 4

​ 源码编译安装是否成功,可以使用echo $?进行查询,如果输出的是0,代表的是安装成功,如果输出的不是0,是其他数字代表源码编译错误,需要查看日志,或者重新编译。

​ Nginx的默认安装根目录是/usr/local/nginx。切换到安装的根目录,在conf文件夹下可以查看到相关的配置文件。可以把Nginx的命令执行文件路径添加到环境变量中,这样就不要用绝对路径调用命令去调用nginx,也不需要查找nginx安装的路径,还可以设置为开机自启动,在rc.local当中添加 /usr/local/nginx/sbin/nginx,使用绝对路径的方式进行开机启动。

export PATH=$PATH:/usr/local/nginx/sbin

三、NGINX代理的两种方式

​ 代理一般分为正向代理和反向代理。

​ 正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

​ 反向代理实际运行方式是代理服务器接受网络上的连接请求。它将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给网络上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

​ 可以这么认为,对于正向代理,代理服务器和客户端处于同一个局域网内;而反向代理,代理服务器和源站则处于同一个局域网内(类似于科需上网)。

四、配置正向代理

​ Nginx的配置文件为/usr/local/nginx/conf/nginx.conf。一般我们不直接在该文件里配置我们的代理,转而使用include的方式,把我们的配置独立成另一个配置文件。当运行nginx的时候,将会调用include当中的配置文件。
http {
    ...
    keepalive_timeout  65; # 建立长连接,减少创建和断开链接TCP的消耗
    include yumproxy.conf; # 添加自己的配置文件(引入外部的配置文件)
}
​ 对于正向代理的配置,通过这两句配置,实现代理的转发。
server {
        resolver 192.168.0.1;
        location / {
                proxy_pass http://$http_host$request_uri;
        }
}

解析:

resolver表示DNS服务器
location表示匹配用户访问的资源,并作进一步转交和处理,可用正则表达式匹配
proxy_pass表示需要代理的地址
$http_host 表示用户访问资源的主机部分
$request_uri 表示用户访问资源的URI部分。
如,http://nginx.org/download/nginx-1.6.3.tar.gz,则$http_host=nginx.org,$request_uri=/download/nginx-1.6.3.tar.gz。

​ nginx默认监听80端口,可以通过修改listen字段,实现切换监听端口。

​ 对于正向代理,是对用户的访问进行一个转发,不做其他处理。

五、正向代理实验

​ 找了两台虚拟机,一台用nginx搭建正向代理,另一台使用该代理访问,以百度为例。先确认nginx服务启动,用netstat命令查看监听端口,接下来使用curl命令设置代理访问百度首页。

nginx实验1

​ 返回200确认值,说明访问网站成功。

nginx实验1(2)

六、反向代理配置

​ 对于反向代理也很简单,如下,

server {
        server_name www.baidu.com;
        location / {
                proxy_pass http://www.baidu.com/;
        }
}

​ server_name字段用于匹配用户访问资源的主机名称;

​ proxy_pass字段表示代理访问的服务器。

​ 与正向代理不同,反向代理是指定了特定的网址。其实也就是限定了访问的对象。指定用户访问www.baidu.com时,只能去百度,而不能访问其他的网站。

​ 如果把proxy_pass的网址替换为新浪的访问地址,访问百度却发现打开的是新浪的地址,这就是代理劫持。

​ 另外,server_name可以匹配多个主机名,用空格分开即可,也可以用正则表达式匹配主机名。

注意:对于没有匹配到的访问地址,nginx会默认走第一条server配置,所以一般可以将第一条server设置为阻止页面。

七、反向代理实验

​ 先按上述配置反向代理,访问百度,正常返回,注意百度的ETAG。

nginx实验二

​ 再访问新浪。

nginx实验二(2)

​ 可以看出,此时虽然我们想访问的是新浪,但是实际访问的还是百度。说明反向代理是指定了固定的访问网址;

​ 在上面反向代理的基础上添加一个空的server配置,只返回404错误。验证没有匹配到访问的网址,将会默认走第一条server。

nginx实验二(3)

​ 访问没有匹配到sername的地址,返回404,控制网站的访问范围,但是这明显不是nginx该考虑的。因为nginx的优势不在于控制访问,而另外一种反向代理服务squid的ACL更加强大。

​ 对于正向代理,Nginx没法控制用户访问的资源,对于所有访问只管转发。对而已的访问没有限制,那么将会出现木马病毒的侵入。

​ 对比反向代理,是可以控制用户访问的网络资源的范围。只代理允许访问的网址,不允许访问的网址到了代理服务器也出不去。

原文地址

分类: 暂无分类 标签: 中间件

评论

暂无评论数据

暂无评论数据

目录