Nginx插件之openresty反向代理和日志滚动配置案例

           Nginx插件之openresty反向代理和日志滚动配置案例

                                    作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

 

 

一.openresty介绍

1>.Nginx介绍

  Nginx是一款高性能web服务器和反向代理服务器,在互联网项目中使用非常频繁,尤其其出色的性能以及轻量级进程占用,已经超过了apache的httpd服务器的使用量。内部可以配置零拷贝(sendfile)实现快速文件传输。Nginx可以做反向代理,负载均衡,HTTP服务器(包含动静分离)以及正向代理。

2>.Openresty介绍

   openresty是将nginx现有一些重要插件做了集成,省去安装nginx之后还需要在安装插件的繁琐步骤,内置luajit插件,能解决接受post提交请求、json消息体解析等功能。

 

二.Windows环境安装openresty

1>.下载openresty安装包

  下载地址:http://openresty.org/cn/download.html

2>.安装openresty

  安装方式很简单,解压即可。

3>.修改Windows版本的nginx.conf的配置文件内容

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  escape=json $remote_addr#$http_client_time#$time_local#$status#$request_body;
    access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
    upstream servers{
        server s101:80 weight=1;
        server s102:80 weight=1;
    }
    map $http_x_forwarded_for  $clientRealIp {
        ~^(?P<firstAddr>[0-9\.]+),?.*$    $firstAddr;
    }
    server {
        listen       80;
        server_name  localhost;
        underscores_in_headers on;
        location / {
            error_page 405 =200 $1;
            lua_need_request_body on;                                                                                            
            content_by_lua 'local s = ngx.var.request_body';
            proxy_pass http://servers;
            proxy_set_header Host $host;
            proxy_set_header remove_user_ip $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
        root   html;
        }
    }
}

4>.启动openresty

 

三.Linux环境安装openresty

  为了配置起来方便,我推荐大家使用root权限,因为使用普通用户做啥都不方便,各种需要提权操作(sudo)。如果实际生产环境中你没法拿到root权限的话,那就还是乖乖用普通用户执行吧,配置起来也都大同小异。

1>.在s101上使用root用户手动添加yum源并修改yum的配置文件

[yinzhengjie@s101 ~]$ su root
Password: 
[root@s101 yinzhengjie]#
[root@s101 yinzhengjie]# vi /etc/yum.repos.d/openresty.repo
[root@s101 yinzhengjie]# cat /etc/yum.repos.d/openresty.repo 
[openresty]
name=Official OpenResty Open Source Repository for CentOS
baseurl=https://openresty.org/package/centos/$releasever/$basearch
skip_if_unavailable=False
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://openresty.org/package/pubkey.gpg
enabled=1
enabled_metadata=1
[root@s101 yinzhengjie]# 
[root@s101 yinzhengjie]# grep keepcache /etc/yum.conf 
keepcache=0
[root@s101 yinzhengjie]# sed -i 's/keepcache=0/keepcache=1/' /etc/yum.conf             #会将下载的文件保存
[root@s101 yinzhengjie]# 
[root@s101 yinzhengjie]# grep keepcache /etc/yum.conf 
keepcache=1
[root@s101 yinzhengjie]# 

2>.在s101上通过yum搜索openresty安装包

[root@s101 yinzhengjie]# yum -y search cache openresty
Loaded plugins: fastestmirror
base                                                                                                                                 | 3.6 kB  00:00:00     
epel/x86_64/metalink                                                                                                                 | 7.6 kB  00:00:00     
epel                                                                                                                                 | 3.2 kB  00:00:00     
extras                                                                                                                               | 3.4 kB  00:00:00     
openresty/7/x86_64/signature                                                                                                         |  490 B  00:00:00     
Retrieving key from https://openresty.org/package/pubkey.gpg
Importing GPG key 0xD5EDEB74:
 Userid     : "OpenResty Admin <admin@openresty.com>"
 Fingerprint: e522 18e7 0878 97dc 6dea 6d6d 97db 7443 d5ed eb74
 From       : https://openresty.org/package/pubkey.gpg
openresty/7/x86_64/signature                                                                                                         | 2.9 kB  00:00:00 !!! 
updates                                                                                                                              | 3.4 kB  00:00:00     
(1/5): extras/7/x86_64/primary_db                                                                                                    | 173 kB  00:00:03     
(2/5): openresty/7/x86_64/primary_db                                                                                                 |  57 kB  00:00:07     
(3/5): updates/7/x86_64/primary_db                                                                                                   | 4.3 MB  00:00:21     
(4/5): epel/x86_64/updateinfo                                                                                                        | 932 kB  00:00:22     
(5/5): epel/x86_64/primary                                                                                                           | 3.6 MB  00:00:33     
Determining fastest mirrors
 * base: mirrors.huaweicloud.com
 * epel: mirrors.tuna.tsinghua.edu.cn
 * extras: mirror.bit.edu.cn
 * updates: mirrors.huaweicloud.com
epel                                                                                                                                            12629/12629
==================================================================== N/S matched: cache ====================================================================
cachefilesd.x86_64 : CacheFiles user-space management daemon
ccache.x86_64 : C/C++ compiler cache
collectd-memcachec.x86_64 : Memcachec plugin for collectd
collectd-rrdcached.x86_64 : RRDCacheD plugin for collectd
dmlite-plugins-memcache.x86_64 : Memcached plugin for dmlite
ghc-date-cache.x86_64 : Date cacher
ghc-date-cache-devel.x86_64 : Haskell date-cache library development files
ghc-lrucache.x86_64 : A simple, pure LRU cache
ghc-lrucache-devel.x86_64 : Haskell lrucache library development files
globus-gass-cache.x86_64 : Globus Toolkit - Globus Gass Cache
globus-gass-cache-devel.x86_64 : Globus Toolkit - Globus Gass Cache Development Files
globus-gass-cache-doc.noarch : Globus Toolkit - Globus Gass Cache Documentaton Files
globus-gass-cache-program.x86_64 : Globus Toolkit - Tools to manipulate local and remote GASS caches
golang-github-patrickmn-go-cache-devel.noarch : An in-memory key:value store/cache library for Go (Golang)
golang-github-patrickmn-go-cache-unit-test-devel.x86_64 : Unit tests for golang-github-patrickmn-go-cache package
kdesdk-kcachegrind.x86_64 : a browser for data provided by profiling tools (like cachegrind)
libmemcached.i686 : Client library and command line tools for memcached server
libmemcached.x86_64 : Client library and command line tools for memcached server
libmemcached-devel.i686 : Header files and development libraries for libmemcached
libmemcached-devel.x86_64 : Header files and development libraries for libmemcached
memcached.x86_64 : High Performance, Distributed Memory Object Cache
memcached-devel.i686 : Files needed for development using memcached protocol
memcached-devel.x86_64 : Files needed for development using memcached protocol
menu-cache-devel.x86_64 : Development files for menu-cache
nodejs-async-cache.noarch : Cache your async lookups and don't fetch the same thing more than necessary
nodejs-lru-cache.noarch : A least recently used cache object for Node.js
nodejs-require-uncached.noarch : Require a module bypassing the cache
nordugrid-arc-acix-cache.noarch : ARC cache index - cache server
nordugrid-arc-cache-service.x86_64 : ARC cache service
opensips-memcached.x86_64 : Memcached connector
pcp-pmda-memcache.x86_64 : Performance Co-Pilot (PCP) metrics for Memcached
perl-Cache-Cache.noarch : Generic cache interface and implementations
perl-Cache-FastMmap.x86_64 : Uses an mmap'ed file to act as a shared memory interprocess cache
perl-Cache-Memcached.noarch : Perl client for memcached
perl-HTTP-Cache-Transparent.noarch : Cache the result of http get-requests persistently
perl-IPC-SharedCache.noarch : Perl module to manage a cache in SysV IPC shared memory
perl-Tie-Cache.noarch : LRU Cache in Memory
php-ZendFramework-Cache-Backend-Apc.noarch : Zend Framework APC cache backend
php-ZendFramework-Cache-Backend-Libmemcached.noarch : Zend Framework libmemcache cache backend
php-ZendFramework-Cache-Backend-Memcached.noarch : Zend Framework memcache cache backend
php-ZendFramework2-Cache.noarch : Zend Framework 2: Cache Component
php-doctrine-cache.noarch : Doctrine Cache
php-doctrine-doctrine-cache-bundle.noarch : Symfony2 Bundle for Doctrine Cache
php-ezc-Cache.noarch : Provides a collection of lightweight classes to cache different kinds of data
php-horde-Horde-Memcache.noarch : Horde Memcache API
php-pear-Cache-Lite.noarch : Fast and Safe little cache system for PHP
php-pecl-memcache.x86_64 : Extension to work with the Memcached caching daemon
php-pecl-memcached.x86_64 : Extension to work with the Memcached caching daemon
php-pecl-zendopcache.x86_64 : The Zend OPcache
php-psr-cache.noarch : PSR Cache: Common interface for caching libraries
php-xcache.x86_64 : Fast, stable PHP opcode cacher
python-fastcache.x86_64 : C implementation of python3 lru_cache
python-flask-cache.noarch : Adds cache support to your Flask application
python-flask-cache-doc.noarch : Documentation for the Flask-Cache module
python-linecache2.noarch : Backport of the linecache module
python-memcached.noarch : A Python memcached client library
python2-backports-functools_lru_cache.noarch : A backport of functools.lru_cache from Python 3.3 as published at ActiveState
python2-cached_property.noarch : A cached-property for decorating methods in Python classes.
python34-cached_property.noarch : A cached-property for decorating methods in Python classes.
root-io-dcache.x86_64 : dCache input/output library for ROOT
rubygem-memcache-client.noarch : A Ruby library for accessing memcached
rubygem-rack-cache-doc.noarch : Documentation for rubygem-rack-cache
statscache-common.noarch : Statscache common library
statscache-consumer.noarch : Statscache consumer
statscache-plugins.noarch : Plugins for statscache daemon
statscache-web.noarch : A REST API server on top of statscache
uwsgi-plugin-cache.x86_64 : uWSGI - Plugin for cache support
uwsgi-router-cache.x86_64 : uWSGI - Plugin for Cache router support
uwsgi-router-memcached.x86_64 : uWSGI - Plugin for Memcached router support
xcache-admin.noarch : XCache Administration
appstream-data.noarch : Cached AppStream metadata
apt-cacher-ng.x86_64 : Caching proxy for package files from Debian
dcap.x86_64 : Client Tools for dCache
dcap-devel.x86_64 : Client Development Files for dCache
dcap-libs.x86_64 : Client Libraries for dCache
dcap-tunnel-gsi.x86_64 : GSI tunnel for dCache
dcap-tunnel-krb.x86_64 : Kerberos tunnel for dCache
dcap-tunnel-ssl.x86_64 : SSL tunnel for dCache
dcap-tunnel-telnet.x86_64 : Telnet tunnel for dCache
gtk-update-icon-cache.x86_64 : Icon theme caching utility
libmediaart.i686 : Library for managing media art caches
libmediaart.x86_64 : Library for managing media art caches
menu-cache.x86_64 : Caching mechanism for freedesktop.org compliant menus
nordugrid-arc-acix-core.noarch : ARC cache index - core
nordugrid-arc-acix-index.noarch : ARC cache index - index server
pcp-pmda-dm.x86_64 : Performance Co-Pilot (PCP) metrics for the Device Mapper Cache and Thin Client
perl-CHI.noarch : Unified cache handling interface
php-horde-Horde-Cache.noarch : Horde Caching API
php-pear-Cache.noarch : Framework for caching of arbitrary data
php-pecl-apcu.x86_64 : APC User Cache
php-pecl-yac.x86_64 : Lockless user data cache
php-psr-simple-cache.noarch : Common interfaces for simple caching (PSR-16)
php-react-cache.noarch : Async caching
python-cachetools.noarch : Extensible memoizing collections and decorators
python-django-compressor.noarch : Compresses linked and inline JavaScript or CSS into single cached files
python-dogpile-cache.noarch : A caching front-end based on the Dogpile lock
python-pytest-cache.noarch : Pytest plugin with mechanisms for caching across test runs
python-repoze-lru.noarch : A tiny LRU cache implementation and decorator
python2-cccolutils.x86_64 : Python Kerberos Credential Cache Collection Utilities
python2-django-redis.noarch : Full featured redis cache backend for Django
rubygem-dalli.noarch : High performance memcached client for Ruby
rubygem-rack-cache.noarch : HTTP Caching for Rack
yum-NetworkManager-dispatcher.noarch : NetworkManager script which tells yum to check its cache on network change
yum-plugin-rpm-warm-cache.noarch : Yum plugin to access the rpmdb files early to warm up access to the db

================================================================== N/S matched: openresty ==================================================================
openresty.x86_64 : OpenResty, scalable web platform by extending NGINX with Lua
openresty-asan.x86_64 : The clang AddressSanitizer (ASAN) version of OpenResty
openresty-asan-debuginfo.x86_64 : Debug information for package openresty-asan
openresty-debug.x86_64 : The debug version of OpenResty
openresty-debug-debuginfo.x86_64 : Debug information for package openresty-debug
openresty-debuginfo.x86_64 : Debug information for package openresty
openresty-doc.noarch : OpenResty documentation tool, restydoc
openresty-openssl.x86_64 : OpenSSL library for OpenResty
openresty-openssl-asan.x86_64 : Clang AddressSanitizer Debug version of the OpenSSL library for OpenResty
openresty-openssl-asan-debuginfo.x86_64 : Debug information for package openresty-openssl-asan
openresty-openssl-asan-devel.x86_64 : Clang AddressSanitizer version of development files for OpenResty's OpenSSL library
openresty-openssl-debug.x86_64 : Debug version of the OpenSSL library for OpenResty
openresty-openssl-debug-debuginfo.x86_64 : Debug information for package openresty-openssl-debug
openresty-openssl-debug-devel.x86_64 : Debug version of development files for OpenResty's OpenSSL library
openresty-openssl-debuginfo.x86_64 : Debug information for package openresty-openssl
openresty-openssl-devel.x86_64 : Development files for OpenResty's OpenSSL library
openresty-opm.noarch : OpenResty Package Manager
openresty-pcre.x86_64 : Perl-compatible regular expression library for OpenResty
openresty-pcre-asan.x86_64 : Clang AddressSanitizer version of the Perl-compatible regular expression library for OpenResty
openresty-pcre-asan-debuginfo.x86_64 : Debug information for package openresty-pcre-asan
openresty-pcre-asan-devel.x86_64 : Development files for openresty-pcre-asan
openresty-pcre-debuginfo.x86_64 : Debug information for package openresty-pcre
openresty-pcre-devel.x86_64 : Development files for openresty-pcre
openresty-resty.noarch : OpenResty command-line utility, resty
openresty-valgrind.x86_64 : The Valgrind debug version of OpenResty
openresty-valgrind-debuginfo.x86_64 : Debug information for package openresty-valgrind
openresty-zlib.x86_64 : The zlib compression library for OpenResty
openresty-zlib-asan.x86_64 : Clang AddressSanitizer version for the zlib compression library for OpenResty
openresty-zlib-asan-debuginfo.x86_64 : Debug information for package openresty-zlib-asan
openresty-zlib-asan-devel.x86_64 : Development files for OpenResty's zlib library
openresty-zlib-debuginfo.x86_64 : Debug information for package openresty-zlib
openresty-zlib-devel.x86_64 : Development files for OpenResty's zlib library
perl-Test-Nginx.noarch : Data-driven test scaffold for Nginx C module and Nginx/OpenResty-based libraries and applications

  Name and summary matches mostly, use "search all" for everything.
[root@s101 yinzhengjie]# 
搜索openresty([root@s101 yinzhengjie]# yum -y search cache openresty)
[root@s101 yinzhengjie]# yum -y install openresty
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.huaweicloud.com
 * epel: mirrors.tuna.tsinghua.edu.cn
 * extras: mirror.bit.edu.cn
 * updates: mirrors.huaweicloud.com
Resolving Dependencies
--> Running transaction check
---> Package openresty.x86_64 0:1.13.6.2-1.el7.centos will be installed
--> Processing Dependency: openresty-zlib >= 1.2.11-3 for package: openresty-1.13.6.2-1.el7.centos.x86_64
--> Processing Dependency: openresty-pcre >= 8.42-1 for package: openresty-1.13.6.2-1.el7.centos.x86_64
--> Processing Dependency: openresty-openssl >= 1.1.0h-1 for package: openresty-1.13.6.2-1.el7.centos.x86_64
--> Running transaction check
---> Package openresty-openssl.x86_64 0:1.1.0h-3.el7.centos will be installed
---> Package openresty-pcre.x86_64 0:8.42-1.el7.centos will be installed
---> Package openresty-zlib.x86_64 0:1.2.11-3.el7.centos will be installed
--> Finished Dependency Resolution

Dependencies Resolved

============================================================================================================================================================
 Package                                  Arch                          Version                                      Repository                        Size
============================================================================================================================================================
Installing:
 openresty                                x86_64                        1.13.6.2-1.el7.centos                        openresty                        1.1 M
Installing for dependencies:
 openresty-openssl                        x86_64                        1.1.0h-3.el7.centos                          openresty                        1.4 M
 openresty-pcre                           x86_64                        8.42-1.el7.centos                            openresty                        154 k
 openresty-zlib                           x86_64                        1.2.11-3.el7.centos                          openresty                         54 k

Transaction Summary
============================================================================================================================================================
Install  1 Package (+3 Dependent packages)

Total download size: 2.6 M
Installed size: 7.4 M
Downloading packages:
warning: /var/cache/yum/x86_64/7/openresty/packages/openresty-1.13.6.2-1.el7.centos.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID d5edeb74: NOKEY:03 ETA 
Public key for openresty-1.13.6.2-1.el7.centos.x86_64.rpm is not installed
(1/4): openresty-1.13.6.2-1.el7.centos.x86_64.rpm                                                                                    | 1.1 MB  00:00:11     
(2/4): openresty-pcre-8.42-1.el7.centos.x86_64.rpm                                                                                   | 154 kB  00:00:00     
(3/4): openresty-zlib-1.2.11-3.el7.centos.x86_64.rpm                                                                                 |  54 kB  00:00:00     
(4/4): openresty-openssl-1.1.0h-3.el7.centos.x86_64.rpm                                                                              | 1.4 MB  00:00:13     
------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                       199 kB/s | 2.6 MB  00:00:13     
Retrieving key from https://openresty.org/package/pubkey.gpg
Importing GPG key 0xD5EDEB74:
 Userid     : "OpenResty Admin <admin@openresty.com>"
 Fingerprint: e522 18e7 0878 97dc 6dea 6d6d 97db 7443 d5ed eb74
 From       : https://openresty.org/package/pubkey.gpg
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : openresty-zlib-1.2.11-3.el7.centos.x86_64                                                                                                1/4 
  Installing : openresty-openssl-1.1.0h-3.el7.centos.x86_64                                                                                             2/4 
  Installing : openresty-pcre-8.42-1.el7.centos.x86_64                                                                                                  3/4 
  Installing : openresty-1.13.6.2-1.el7.centos.x86_64                                                                                                   4/4 
  Verifying  : openresty-zlib-1.2.11-3.el7.centos.x86_64                                                                                                1/4 
  Verifying  : openresty-openssl-1.1.0h-3.el7.centos.x86_64                                                                                             2/4 
  Verifying  : openresty-pcre-8.42-1.el7.centos.x86_64                                                                                                  3/4 
  Verifying  : openresty-1.13.6.2-1.el7.centos.x86_64                                                                                                   4/4 

Installed:
  openresty.x86_64 0:1.13.6.2-1.el7.centos                                                                                                                  

Dependency Installed:
  openresty-openssl.x86_64 0:1.1.0h-3.el7.centos        openresty-pcre.x86_64 0:8.42-1.el7.centos        openresty-zlib.x86_64 0:1.2.11-3.el7.centos       

Complete!
[root@s101 yinzhengjie]# 
安装openresty服务([root@s101 yinzhengjie]# yum -y install openresty)
[root@s101 yinzhengjie]# which openresty
/usr/bin/openresty
[root@s101 yinzhengjie]# 
验证openresty是否安装成功([root@s101 yinzhengjie]# which openresty)

3>.将s101的安装成功的rpm包分发到s102上

[root@s101 yinzhengjie]# grep cachedir /etc/yum.conf 
cachedir=/var/cache/yum/$basearch/$releasever
[root@s101 yinzhengjie]# cd /var/cache/yum/$basearch/$releasever
[root@s101 yum]# ll
total 0
drwxr-xr-x. 3 root root 14 May 24 00:21 x86_64
[root@s101 yum]# cd x86_64/
[root@s101 x86_64]# ll
total 4
drwxr-xr-x. 10 root root 4096 Aug  6 18:21 7
[root@s101 x86_64]# cd 7
[root@s101 7]# ll
total 40
drwxr-xr-x. 4 root root 4096 Aug  6 18:16 base
drwxr-xr-x. 4 root root 4096 Aug  6 18:16 epel
drwxr-xr-x. 4 root root 4096 Aug  6 18:16 extras
drwxr-xr-x. 4 root root 4096 Jun  3 19:34 mysql56-community
drwxr-xr-x. 4 root root 4096 Jun  3 19:34 mysql-connectors-community
drwxr-xr-x. 4 root root 4096 Jun  3 19:34 mysql-tools-community
drwxr-xr-x  4 root root 4096 Aug  6 18:15 openresty
-rw-r--r--  1 root root  960 Aug  6 18:21 timedhosts
-rw-r--r--. 1 root root 1184 Aug  6 18:16 timedhosts.txt
drwxr-xr-x. 4 root root 4096 Aug  6 18:16 updates
[root@s101 7]# cd openresty/
[root@s101 openresty]# ll
total 76
-rw-r--r-- 1 root root 58801 May 14 23:20 91a55c04e6f818158d041bb9bc0f7f03750a015e4436c6b5649371dc1036aaa4-primary.sqlite.bz2
-rw-r--r-- 1 root root     0 Aug  6 18:15 cachecookie
drwxr-xr-x 2 root root    30 Aug  6 18:16 gen
drwxr-xr-x 2 root root  4096 Aug  6 18:21 packages
-rw-r--r-- 1 root root  2991 May 14 23:20 repomd.xml
-rw-r--r-- 1 root root   490 May 14 23:20 repomd.xml.asc
[root@s101 openresty]# cd packages/
[root@s101 packages]# ll
total 2740
-rw-r--r-- 1 root root 1122948 May 14 23:08 openresty-1.13.6.2-1.el7.centos.x86_64.rpm
-rw-r--r-- 1 root root 1441932 May 14 20:03 openresty-openssl-1.1.0h-3.el7.centos.x86_64.rpm
-rw-r--r-- 1 root root  157592 May 14 16:46 openresty-pcre-8.42-1.el7.centos.x86_64.rpm
-rw-r--r-- 1 root root   55004 Jul 14  2017 openresty-zlib-1.2.11-3.el7.centos.x86_64.rpm
[root@s101 packages]# 
[root@s101 packages]# scp * s102:~
openresty-1.13.6.2-1.el7.centos.x86_64.rpm                                                                                100% 1097KB   1.1MB/s   00:00    
openresty-openssl-1.1.0h-3.el7.centos.x86_64.rpm                                                                          100% 1408KB   1.4MB/s   00:00    
openresty-pcre-8.42-1.el7.centos.x86_64.rpm                                                                               100%  154KB 153.9KB/s   00:00    
openresty-zlib-1.2.11-3.el7.centos.x86_64.rpm                                                                             100%   54KB  53.7KB/s   00:00    
[root@s101 packages]#
将s101下载好的rpm包拷贝到s102([root@s101 packages]# scp * s102:~)
[yinzhengjie@s102 ~]$ su root
Password: 
[root@s102 yinzhengjie]# cd
[root@s102 ~]# ll
total 289812
-rw-------. 1 root root      2748 May 23 23:15 anaconda-ks.cfg
-rw-r--r--. 1 root root 214092195 May 27 01:06 blk_1073741826
-rw-r--r--. 1 root root  79874467 May 27 01:05 blk_1073741827
drwxr-xr-x. 9 root root      4096 Aug 17  2016 hadoop-2.7.3
-rw-r--r--. 1 root root   1122948 Aug  6 18:43 openresty-1.13.6.2-1.el7.centos.x86_64.rpm
-rw-r--r--. 1 root root   1441932 Aug  6 18:43 openresty-openssl-1.1.0h-3.el7.centos.x86_64.rpm
-rw-r--r--. 1 root root    157592 Aug  6 18:43 openresty-pcre-8.42-1.el7.centos.x86_64.rpm
-rw-r--r--. 1 root root     55004 Aug  6 18:43 openresty-zlib-1.2.11-3.el7.centos.x86_64.rpm
[root@s102 ~]#
[root@s102 ~]# rpm -ivh  *.rpm --force
warning: openresty-1.13.6.2-1.el7.centos.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID d5edeb74: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:openresty-zlib-1.2.11-3.el7.cento################################# [ 25%]
   2:openresty-openssl-1.1.0h-3.el7.ce################################# [ 50%]
   3:openresty-pcre-8.42-1.el7.centos ################################# [ 75%]
   4:openresty-1.13.6.2-1.el7.centos  ################################# [100%]
[root@s102 ~]# 
在s102使用rpm方式安装openresty([root@s102 ~]# rpm -ivh *.rpm --force)
[root@s102 ~]# which openresty            #验证是否安装成功
/usr/bin/openresty
[root@s102 ~]# 
验证openresty是否安装成功([root@s102 ~]# which openresty)

4>.修改s101和s102的Nginx配置文件

[root@s101 ~]# more /usr/local/openresty/nginx/conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  escape=json $msec#$time_local#$clientRealIp#$http_client_time#$status#$request_body;
    access_log  logs/access.log  main;
    sendfile        on;    
    keepalive_timeout  65;
    map $http_x_forwarded_for  $clientRealIp {
        ~^(?P<firstAddr>[0-9\.]+),?.*$    $firstAddr;
    }
    server {
        listen       80;
        server_name  localhost;
        underscores_in_headers on;
        location / {
            root   html;
            index  index.html index.htm;
            error_page 405 =200 $1;
            lua_need_request_body on;                                                                     
            content_by_lua 'local s = ngx.var.request_body';
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
[root@s101 ~]# openresty -t      #检查配置文件是否存在异常
nginx: the configuration file /usr/local/openresty/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/openresty/nginx/conf/nginx.conf test is successful
[root@s101 ~]# 
[root@s101 ~]# openresty        #运行nginx
[root@s101 ~]# 
[root@s101 ~]# netstat -untalp | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      19757/nginx: master 
tcp        0      0 172.30.100.101:8019     0.0.0.0:*               LISTEN      6685/java           
tcp        0      0 172.30.100.101:8020     0.0.0.0:*               LISTEN      6380/java           
tcp        0      0 172.30.100.101:50070    0.0.0.0:*               LISTEN      6380/java           
tcp        0      0 172.30.100.101:8020     172.30.100.104:45635    ESTABLISHED 6380/java           
tcp        0      0 172.30.100.101:8020     172.30.100.102:54883    ESTABLISHED 6380/java           
tcp        0      0 172.30.100.101:8020     172.30.100.101:49054    ESTABLISHED 6380/java           
tcp        0      0 172.30.100.101:49054    172.30.100.101:8020     ESTABLISHED 6685/java           
tcp        0      0 172.30.100.101:46284    172.30.100.105:8020     TIME_WAIT   -                   
tcp        0      0 172.30.100.101:35841    172.30.100.103:8480     TIME_WAIT   -                   
tcp        0      0 172.30.100.101:8020     172.30.100.103:35239    ESTABLISHED 6380/java           
tcp6       0      0 172.30.100.101:8088     :::*                    LISTEN      6883/java           
tcp6       0      0 172.30.100.101:8030     :::*                    LISTEN      6883/java           
tcp6       0      0 172.30.100.101:8031     :::*                    LISTEN      6883/java           
tcp6       0      0 172.30.100.101:8032     :::*                    LISTEN      6883/java           
tcp6       0      0 172.30.100.101:8033     :::*                    LISTEN      6883/java           
tcp6       0      0 172.30.100.101:8031     172.30.100.103:38640    ESTABLISHED 6883/java           
tcp6       0      0 172.30.100.101:8031     172.30.100.104:57601    ESTABLISHED 6883/java           
tcp6       0      0 172.30.100.101:8031     172.30.100.102:58908    ESTABLISHED 6883/java           
[root@s101 ~]# 
[root@s102 logs]# more /usr/local/openresty/nginx/conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  escape=json $msec#$time_local#$clientRealIp#$http_client_time#$status#$request_body;
    access_log  logs/access.log  main;
    sendfile        on;    
    keepalive_timeout  65;
    map $http_x_forwarded_for  $clientRealIp {
        ~^(?P<firstAddr>[0-9\.]+),?.*$    $firstAddr;
    }
    server {
        listen       80;
        server_name  localhost;
        underscores_in_headers on;
        location / {
            root   html;
            index  index.html index.htm;
            error_page 405 =200 $1;
            lua_need_request_body on;                                                                     
            content_by_lua 'local s = ngx.var.request_body';
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
[root@s102 logs]# openresty -t
nginx: the configuration file /usr/local/openresty/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/openresty/nginx/conf/nginx.conf test is successful
[root@s102 logs]# openresty 
[root@s102 logs]# 
[root@s102 logs]# ps -ef | grep nginx | grep -v grep
root       6865      1  0 19:20 ?        00:00:00 nginx: master process openresty
nobody     6866   6865  0 19:20 ?        00:00:00 nginx: worker process
[root@s102 logs]# 
[root@s102 logs]# netstat -untalp | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      6865/nginx: master  
tcp        0      0 0.0.0.0:8480            0.0.0.0:*               LISTEN      4240/java           
tcp        0      0 172.30.100.102:54883    172.30.100.101:8020     ESTABLISHED 4159/java           
tcp        0      0 172.30.100.102:37051    172.30.100.105:8020     ESTABLISHED 4159/java           
tcp6       0      0 :::8040                 :::*                    LISTEN      4387/java           
tcp6       0      0 :::8042                 :::*                    LISTEN      4387/java           
tcp6       0      0 :::58022                :::*                    LISTEN      4081/java           
tcp6       0      0 172.30.100.102:58908    172.30.100.101:8031     ESTABLISHED 4387/java           
[root@s102 logs]# 
s102节点的nginx.conf配置文件内容([root@s102 logs]# more /usr/local/openresty/nginx/conf/nginx.conf)

5>.在s101编写滚动日志脚本并同步到s102(别忘记给脚本添加执行权限)

[root@s101 logs]# more /usr/local/openresty/nginx/logs/roll_log.sh
#!/bin/bash
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie
#EMAIL:y1053419035@qq.com

#定义日期格式
dateStr=`date '+%Y-%m-%d-%H-%M'`

#将之前的日志文件改名,将之前的access.log添加我们上面定义的日期格式
mv /usr/local/openresty/nginx/logs/access.log /usr/local/openresty/nginx/logs/access.log.${dateStr}

#改名之后,我们需要创建出access.log文件,因为新的日志文件会持续往这里发送哟
touch access.log

#重新加载配置文件信息
openresty -s reload
[root@s101 logs]# 
[root@s101 logs]# chmod +x roll_log.sh        #别忘记加执行权限哟
[root@s101 logs]# ll
total 12
-rw-r--r-- 1 root root   0 Aug  6 20:48 access.log
-rw-r--r-- 1 root root 684 Aug  6 20:48 error.log
-rw-r--r-- 1 root root   6 Aug  6 19:17 nginx.pid
-rwxr-xr-x 1 root root 531 Aug  6 20:19 roll_log.sh
[root@s101 logs]# 
[root@s101 logs]# scp /usr/local/openresty/nginx/logs/roll_log.sh s102:/usr/local/openresty/nginx/logs/roll_log.sh
roll_log.sh                                                                                                               100%  531     0.5KB/s   00:00    
[root@s101 logs]#     

6>.通过linux crontab调度脚本执行【注意,s101和s102要执行相同的操作哟】

[root@s101 logs]# echo "* * * * * root source /etc/profile;/usr/local/openresty/nginx/logs/roll_log.sh" >> /etc/crontab 
[root@s101 logs]# 
[root@s101 logs]# cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

* * * * * root source /etc/profile;/usr/local/openresty/nginx/logs/roll_log.sh
[root@s101 logs]# systemctl enable crond.service
[root@s101 logs]# service crond status
Redirecting to /bin/systemctl status  crond.service
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Mon 2018-08-06 20:27:26 PDT; 3min 46s ago
 Main PID: 767 (code=exited, status=0/SUCCESS)

Aug 04 19:26:03 s101 systemd[1]: Started Command Scheduler.
Aug 04 19:26:03 s101 systemd[1]: Starting Command Scheduler...
Aug 04 19:26:04 s101 crond[767]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 78% if used.)
Aug 04 19:26:04 s101 crond[767]: (CRON) INFO (running with inotify support)
Aug 06 20:27:26 s101 crond[767]: (CRON) INFO (Shutting down)
Aug 06 20:27:26 s101 systemd[1]: Stopping Command Scheduler...
Aug 06 20:27:26 s101 systemd[1]: Stopped Command Scheduler.
[root@s101 logs]# service crond start
Redirecting to /bin/systemctl start  crond.service
[root@s101 logs]# service crond status
Redirecting to /bin/systemctl status  crond.service
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2018-08-06 20:31:21 PDT; 3s ago
 Main PID: 20654 (crond)
   CGroup: /system.slice/crond.service
           └─20654 /usr/sbin/crond -n

Aug 06 20:31:21 s101 crond[20654]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 79% if used.)
Aug 06 20:31:21 s101 systemd[1]: Started Command Scheduler.
Aug 06 20:31:21 s101 systemd[1]: Starting Command Scheduler...
Aug 06 20:31:21 s101 crond[20654]: (CRON) INFO (running with inotify support)
Aug 06 20:31:21 s101 crond[20654]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
[root@s101 logs]# 
[root@s102 ~]# echo "* * * * * root source /etc/profile;/usr/local/openresty/nginx/logs/roll_log.sh" >> /etc/crontab 
[root@s102 ~]# cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

* * * * * root source /etc/profile;/usr/local/openresty/nginx/logs/roll_log.sh
[root@s102 ~]# service crond status
Redirecting to /bin/systemctl status  crond.service
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2018-08-04 19:26:12 PDT; 2 days ago
 Main PID: 783 (crond)
   CGroup: /system.slice/crond.service
           └─783 /usr/sbin/crond -n

Aug 04 19:26:12 s102 systemd[1]: Started Command Scheduler.
Aug 04 19:26:12 s102 systemd[1]: Starting Command Scheduler...
Aug 04 19:26:12 s102 crond[783]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 18% if used.)
Aug 04 19:26:13 s102 crond[783]: (CRON) INFO (running with inotify support)
[root@s102 ~]# 
s102只需要重复s101的步骤即可([root@s102 ~]# echo "* * * * * root source /etc/profile;/usr/local/openresty/nginx/logs/roll_log.sh" >> /etc/crontab )

 

四.使用Java代码测试Nginx反向代理是否成功

1>.编写资源工具类

{
  "appChannel": "anroid bus",
  "appId": "sohuvideo",
  "appPlatform": "ios",
  "appVersion": "1.1.0",
  "deviceStyle": "oppo 1",
  "errorLogs": [
    {
      "appChannel": "umeng",
      "appId": "gaodemap",
      "appPlatform": "blackberry",
      "appVersion": "1.1.0",
      "deviceStyle": "vivo 3",
      "errorBrief": "at cn.lift.dfdf.web.AbstractBaseController.validInbound(AbstractBaseController.java:72)",
      "errorDetail": "at cn.lift.dfdfdf.control.CommandUtil.getInfo(CommandUtil.java:67) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606)",
      "osType": "android 4.0",
      "tenantId": "tnt023"
    }
  ],
  "eventLogs": [
    {
      "appChannel": "anroid bus",
      "appId": "tianya",
      "appPlatform": "android",
      "appVersion": "2.0.0",
      "deviceStyle": "红米",
      "eventId": "popmenu",
      "osType": "ios11",
      "tenantId": "tnt009"
    },
    {
      "appChannel": "appstore",
      "appId": "gaodemap",
      "appPlatform": "android",
      "appVersion": "1.1.0",
      "deviceStyle": "iphone 7 plus",
      "eventId": "popmenu",
      "osType": "android 4.0",
      "tenantId": "tnt009"
    },
    {
      "appChannel": "appstore",
      "appId": "faobengplay",
      "appPlatform": "blackberry",
      "appVersion": "1.0.0",
      "deviceStyle": "vivo 3",
      "eventId": "autoImport",
      "osType": "ios11",
      "tenantId": "tnt009"
    },
    {
      "appChannel": "anroid bus",
      "appId": "tianya",
      "appPlatform": "blackberry",
      "appVersion": "1.1.0",
      "deviceStyle": "iphone 7 plus",
      "eventId": "popmenu",
      "osType": "mi 5.5",
      "tenantId": "tnt009"
    },
    {
      "appChannel": "anroid bus",
      "appId": "tianya",
      "appPlatform": "android",
      "appVersion": "1.2.0",
      "deviceStyle": "iphone 7",
      "eventId": "bookstore",
      "osType": "ios11",
      "tenantId": "tnt501"
    }
  ],
  "osType": "ios11",
  "pageLogs": [
    null,
    null,
    null,
    null,
    null
  ],
  "startupLogs": [
    {
      "appChannel": "anroid bus",
      "appId": "faobengplay",
      "appPlatform": "ios",
      "appVersion": "1.2.0",
      "brand": "魅族",
      "carrier": "中国铁通",
      "country": "america",
      "deviceStyle": "vivo 3",
      "network": "wifi",
      "osType": "android 4.0",
      "province": "guangdong",
      "screenSize": "480 * 320",
      "tenantId": "tnt501"
    },
    {
      "appChannel": "appstore",
      "appId": "sohuvideo",
      "appPlatform": "blackberry",
      "appVersion": "2.0.0",
      "brand": "Apple",
      "carrier": "中国铁通",
      "country": "china",
      "deviceStyle": "iphone 7",
      "network": "3g",
      "osType": "ios11",
      "province": "guangxi",
      "screenSize": "1136 * 640",
      "tenantId": "tnt501"
    }
  ],
  "tenantId": "tnt009",
  "usageLogs": [
    {
      "appChannel": "umeng",
      "appId": "gaodemap",
      "appPlatform": "winphone",
      "appVersion": "1.1.0",
      "deviceStyle": "iphone 7",
      "osType": "ios11",
      "tenantId": "tnt009"
    },
    {
      "appChannel": "anroid bus",
      "appId": "tianya",
      "appPlatform": "android",
      "appVersion": "1.2.0",
      "deviceStyle": "iphone 6",
      "osType": "android 4.0",
      "tenantId": "tnt501"
    },
    {
      "appChannel": "umeng",
      "appId": "tianya",
      "appPlatform": "winphone",
      "appVersion": "1.0.0",
      "deviceStyle": "vivo 3",
      "osType": "mi 5.5",
      "tenantId": "tnt023"
    },
    {
      "appChannel": "umeng",
      "appId": "sohuvideo",
      "appPlatform": "android",
      "appVersion": "1.0.0",
      "deviceStyle": "iphone 6 plus",
      "osType": "mi 5.5",
      "tenantId": "tnt023"
    }
    ]
}
demo.json 文件内容
 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/%E5%89%8D%E7%AB%AF%E9%82%A3%E4%BA%9B%E4%BA%8B/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 package cn.org.yinzhengjie.umeng.phone;
 7 
 8 import java.io.ByteArrayOutputStream;
 9 import java.io.IOException;
10 import java.io.InputStream;
11 
12 /**
13  * 资源工具类
14  */
15 public class ResourceUtil {
16 
17     /**
18      * 获得类路径下的资源文件流
19      */
20     public static InputStream getResource(String file){
21         //得到当前线程使用的类加载器
22         ClassLoader loader = Thread.currentThread().getContextClassLoader();
23         InputStream in = loader.getResourceAsStream(file) ;
24         return in ;
25     }
26 
27     /**
28      * 以String方式读取流内容
29      */
30     public static String getResourceInString(String file) throws IOException {
31         InputStream in = getResource(file) ;
32         ByteArrayOutputStream baos = new ByteArrayOutputStream() ;
33         byte[] buf = new byte[1024] ;
34         int len =0 ;
35         while((len = in.read(buf)) != -1){
36             baos.write(buf , 0 , len);
37         }
38         in.close();
39         return new String(baos.toByteArray()) ;
40     }
41 }

2>.编写上传日志代码

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/%E5%89%8D%E7%AB%AF%E9%82%A3%E4%BA%9B%E4%BA%8B/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 package cn.org.yinzhengjie.umeng.phone;
 7 
 8 import java.io.OutputStream;
 9 import java.net.HttpURLConnection;
10 import java.net.URL;
11 import java.util.Date;
12 
13 /**
14  * 上传日志
15  */
16 public class Uploader {
17     public static void main(String[] args) {
18         try {
19             String str = "http://localhost:80/index.html" ;
20 
21             URL url = new URL(str);
22             //获得url连接
23             HttpURLConnection conn = (HttpURLConnection) url.openConnection();
24             //post方式提交
25             conn.setRequestMethod("POST");
26             //允许输出
27             conn.setDoOutput(true);
28             //设置上传的数据类型
29             conn.setRequestProperty("content-type" , "application/json");
30             //设置时间对齐
31             conn.setRequestProperty("client_time", new Date().getTime() + "");
32 
33             //从连接中获取输出流
34             OutputStream out = conn.getOutputStream();
35             //读取资源样本日志文件
36             String json = ResourceUtil.getResourceInString("demo.json") ;
37             //将json数据通过输出流发送出去
38             out.write(json.getBytes());
39             out.flush();
40             out.close();
41             //通过返回的响应信息判断是否传输成功
42             int code = conn.getResponseCode() ;
43             //如果状态码是200说明发送成功了
44             if(code == 200){
45                 System.out.println("OK");
46             }
47         } catch (Exception e) {
48             e.printStackTrace();
49         }
50     }
51 }
52 
53 
54 
55 /*
56 以上代码执行结果如下:
57 OK
58  */

3>.查看s101服务器端日志是否收到

 

4>.查看s102端日志是否收到

 

 

posted @ 2018-08-06 08:58  尹正杰  阅读(2327)  评论(0编辑  收藏  举报