【Nginx】Nginx在Linux下的入门介绍

Nginx的安装

下载、解压

Nginx下载安装包,我下的是nginx-1.8.0.tar.gz。解压后的目录为:

[[email protected] third_package]# tar -zxf nginx-1.8.0.tar.gz
[[email protected] third_package]# ll nginx-1.8.0
total 652
drwxr-xr-x 6 1001 1001   4096 Jul 23 18:17 auto
-rw-r--r-- 1 1001 1001 249124 Apr 21  2015 CHANGES
-rw-r--r-- 1 1001 1001 379021 Apr 21  2015 CHANGES.ru
drwxr-xr-x 2 1001 1001   4096 Jul 23 18:17 conf
-rwxr-xr-x 1 1001 1001   2478 Apr 21  2015 configure
drwxr-xr-x 4 1001 1001   4096 Jul 23 18:17 contrib
drwxr-xr-x 2 1001 1001   4096 Jul 23 18:17 html
-rw-r--r-- 1 1001 1001   1397 Apr 21  2015 LICENSE
drwxr-xr-x 2 1001 1001   4096 Jul 23 18:17 man
-rw-r--r-- 1 1001 1001     49 Apr 21  2015 README
drwxr-xr-x 8 1001 1001   4096 Jul 23 18:17 src

依赖的软件

安装之前把依赖的软件装上,我这里用YUMyum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

安装

[[email protected] nginx-1.8.0]# pwd
/installation_package/nginx-1.8.0
[[email protected] nginx-1.8.0]#
[[email protected] nginx-1.8.0]# ./configure --prefix=/opt/nginx_1

执行./configure后在添加了一个目录objs--prefix表示安装到此目录,如果不设置默认安装到/usr/local/nginx

编译工作:

make
make install

启动

/opt/nginx_1/sbin/nginx启动,默认使用的是安装目录的NGINX_HOME/conf/nginx.conf,也就是/opt/nginx_1/conf/nginx.conf
当然,也可以使用/opt/nginx_1/sbin/nginx -c /opt/nginx_1/conf/nginx.conf指定配置文件。

Nginx的反向代理

我们常用Nginx做反向代理,在设置反向代理前,应先了解下正向代理反向代理

如何设置

将到达Nginx的请求转到后端具体的主机,可通过设置上游服务器代理转发。比如:

http {
    ...
    upstream myweb {
        server 127.0.0.1:9999;
    }

    server {
        ...
        location /myweb {
            proxy_pass  http://myweb;
        }
    }

}

设置好之后,将上游服务器127.0.0.1:9999也部署好,就可以通过Nginx享受上游服务器的具体服务了。

但要注意请求的信息的转发,比如后端是一台TOMCAT,里面运行一个Servet打印各项参数:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        StringBuffer sb = new StringBuffer();
        sb.append("request.getProtocol() : " + request.getProtocol()).append("\n");
        sb.append("request.getScheme() : " + request.getScheme()).append("\n");
        sb.append("request.getRemoteAddr() : " + request.getRemoteAddr()).append("\n");
        sb.append("request.getRemoteHost() : " + request.getRemoteHost()).append("\n");
        sb.append("request.getServerPort() : " + request.getServerPort()).append("\n");
        sb.append("request.getRemotePort() : " + request.getRemotePort()).append("\n");
        sb.append("request.getQueryString() : " + request.getQueryString()).append("\n");
        sb.append("request.getRemoteUser() : " + request.getRemoteUser()).append("\n");
        sb.append("request.getMethod() : " + request.getMethod()).append("\n");
        sb.append("request.getLocalAddr() : " + request.getLocalAddr()).append("\n");
        sb.append("request.getLocalName() : " + request.getLocalName()).append("\n");
        sb.append("request.getPathInfo() : " + request.getPathInfo()).append("\n");
        sb.append("request.getRequestURI() : " + request.getRequestURI()).append("\n");
        sb.append("request.getRequestURL() : " + request.getRequestURL()).append("\n");
        sb.append("request.getContextPath() : " + request.getContextPath()).append("\n");

        response.getWriter().append("Served at: ").append(request.getContextPath()).append("\n").append(sb);
    }

直接访问TOMCAT,http://nick-huang.com:9999/myweb/PrintEnvInfoServlet?keyword=hello-world,打印的信息是这样的:

Served at: /myweb
request.getProtocol() : HTTP/1.1
request.getScheme() : http
request.getRemoteAddr() : 客户端IP
request.getRemoteHost() : 客户端IP
request.getServerPort() : 9999
request.getRemotePort() : 64494
request.getQueryString() : keyword=hello-world
request.getRemoteUser() : null
request.getMethod() : GET
request.getLocalAddr() : 服务端IP
request.getLocalName() : 服务端IP
request.getPathInfo() : null
request.getRequestURI() : /myweb/PrintEnvInfoServlet
request.getRequestURL() : http://nick-huang.com:9999/myweb/PrintEnvInfoServlet
request.getContextPath() : /myweb

只作反向代理的设置,访问NGINX,https://nick-huang.com:777/myweb/PrintEnvInfoServlet?keyword=hello-world,后打印:

Served at: /myweb
request.getProtocol() : HTTP/1.0
request.getScheme() : http
request.getRemoteAddr() : 127.0.0.1
request.getRemoteHost() : 127.0.0.1
request.getServerPort() : 80
request.getRemotePort() : 54856
request.getQueryString() : keyword=hello-world
request.getRemoteUser() : null
request.getMethod() : GET
request.getLocalAddr() : 127.0.0.1
request.getLocalName() : localhost
request.getPathInfo() : null
request.getRequestURI() : /myweb/PrintEnvInfoServlet
request.getRequestURL() : http://myweb/myweb/PrintEnvInfoServlet
request.getContextPath() : /myweb

反向代理后的请求头信息传递

可以发现,反向代理后ProtocolRemoteAddrServerPortRequestURL等参数均有所不同,那么我们需要设置代理时传递参数。
Nginx配置:

    upstream myweb {
        server 127.0.0.1:9999;
        keepalive 32;
    }
    ...
        location /myweb {
            proxy_set_header Host $host:$server_port;
            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;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            proxy_pass  http://myweb;
        }

相关说明,请点击链接:proxy_http_versionkeepalive

Tomcat的/conf/server.xmlHost节点下添加:

<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https" httpsServerPort="777" />

相关说明,请点击链接:org.apache.catalina.valves Class RemoteIpValve

访问https://nick-huang.com:777/myweb/PrintEnvInfoServlet?keyword=hello-world,日志是这样的:

Served at: /myweb
request.getProtocol() : HTTP/1.1
request.getScheme() : https
request.getRemoteAddr() : 客户端IP
request.getRemoteHost() : 客户端IP
request.getServerPort() : 777
request.getRemotePort() : 55022
request.getQueryString() : keyword=hello-world
request.getRemoteUser() : null
request.getMethod() : GET
request.getLocalAddr() : 127.0.0.1
request.getLocalName() : localhost
request.getPathInfo() : null
request.getRequestURI() : /myweb/PrintEnvInfoServlet
request.getRequestURL() : https://nick-huang.com:777/myweb/PrintEnvInfoServlet
request.getContextPath() : /myweb

原文地址:https://www.cnblogs.com/nick-huang/p/7231627.html

时间: 2024-10-09 17:06:22

【Nginx】Nginx在Linux下的入门介绍的相关文章

Nginx系列-1.Linux下安装Nginx

Nginx系列-1.Linux下安装Nginx 目录 - Nginx系列 Nginx系列-1.Linux下安装Nginx Nginx系列-2.配置LNMP(Linux.Nginx.MySQL.PHP)架构 Nginx系列-3.配置Nginx虚拟主机 Nginx系列-4.Nginx日志配置及日志切割 Nginx系列-5.配置Nginx的防盗链 Nginx系列-6.配置Nginx的HTTPS Nginx系列-7.配置Nginx使用uwsgi支持web.py框架 Nginx系列-8.配置Nginx+A

Linux 下 Redis使用介绍

出自http://blog.csdn.net/ajun_studio/article/details/6698147 和http://www.oschina.net/question/12_18065?sort=time Redis 是一个高性能的key-value数据库. redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用.它提供了Python,Ruby,Erlang,PHP,Java客户端,使用很方便. Redis

Linux下grep入门

Linux下入门grep用法 1.grep简述及特点 简介:全局搜索正则表达式出来的行并打印 (Global search REgular expression and Print out the line),一种按照特定模式(pattern)的文本过滤工具 模式:pattern,通过有正则表达式(refexp)特殊字符以及文本字符组成的条件来过滤 正则表达式:refexp,有一些bash支持的特殊文本字符来表示特殊含义,如果特殊字符当原本字符匹配需要转义 2.正则表达式分类 基本正则表达式:

Linux 下的图形库介绍

在进行Linux下的图形系统编程时,我们常常会遇到以下这些概念: Framebuffer, X11, SDL,DFB, miniGUI, OpenGL,QT, GTK,KDE, GNOME等等. 一.Linux 图形领域的基础设施 1.1 X Window  X Window从逻辑上分为三层:X Server.X Client和X协议. 最底层的X Server(X服务器)主要处理输入/输出信息并维护相关资源,它接受来自键盘.鼠标的操作并将它交给X Client(X客户端)作出反馈,而由X Cl

Linux下CMake使用介绍

CMake是一个跨平台的编译自动配置工具,它使用一个名为CMakeLists.txt的文件来描述构建过程,可以产生标准的构建文件.它可以用简单的语句来描述所有平台的安装(编译过程).它能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake.CMake并不直接建构出最终的软件,而是产生标准的建构档(如Unix的Makefile或Windows Visual C++的projects/workspaces),然后再依一般的建构方式使

uWSGI+Nginx+Flask在Linux下的部署

搞了一天多,终于搞通了uWSGI的部署原理,下面总结一下遇到的一些坑,希望给读者能够少走弯路. 简单来说,uWSGI是一个web服务器,Nginx进行反向代理的其实跟这些服务器可以说没有任何关系,你提供动态内容的服务器可以是apache/nginx/tomcat,当然也可以是uWSGI,他们之间的代理关系其实都是通过tcp/ip协议进行通信的.当然uWSGI相对于其它服务器来说有其特殊的地方,不同之处在于它可以提供独特的uwsgi协议进行通信.也就是说,nginx和uWSGI之间的通信协议可以有

nginx安装(Linux下)

1.进入xshell或者terminal(此处以xshell为例),连接服务器(ssh [email protected]主机IP地址) 2.获取Nginx安装包: 官网:https://nginx.org/en/download.html 3.使用wget命令下载Nginx包: wget https://nginx.org/download/nginx-1.15.6.tar.gz -p /usr/src 包不大,等着下载完就OK 查看下载的压缩包: cd /usr/src ls # 查看下载

Linux下udev详细介绍

每次在搭建OracleRAC环境中,遇到问题最多的就是关于ASM磁盘的的问题,通过查看网上许多搭建RAC的文档,发现Oracle10g RAC大家普遍的修改/etc/udev/rules.d/60-raw.rules,而一些搭建Oracle11R2的RAC,大家都在配置的是/etc/udev/rules.d/99-oracle-asmdevices.rules这个文件,面对这样一种情况,我不是很明白,这两个文件到底有什么区别,这个问题困扰了我很久,直到今天遇到这样一个问题:使用udev管理asm

Linux(一)__入门介绍

linux的特点 优点: 1.免费的/开源的系统 2.支持多线程/多用户的系统 3.安全性好 4.对内存和文件管理优越 5.提供了丰富的网络功能 6.良好的用户界面.图形化界面和字符型界面 linux体积最少只需要内存4M,由于小所以可以做嵌入式开发 linux系统的组成: 内核:是系统的心脏,实现操作系统的基本功能 shell:是系统的用户界面.提供用户与系统交互的一种借口 文件系统:是存放在硬盘上同意组织管理的组织集 应用程序:标准的linux系统都有一套应用程序集,包括:文本编辑,上网浏览