jenkins完整实现代码自动发布和回滚至某版本的python脚本、linux进程永久放后台运行的命令之setsid以及保存Tengine/nginx模块指令大全

一、jenkins完整实现代码自动发布和回滚至某版本的python脚本

    今天因为服务器迁移变迁,又对发布脚本进行了一些优化改进。之前在公司的发布脚本上进行了一个主要的回滚改进,即在版本文件夹中引入了SVN版本号从而实现回滚时可回滚至确定的版本号,也有过一篇这文件,今天再在这上面进行了一些改善,所以在这笔记本里保存一下。

在jenkins平台中的Comman命令配置如下:

#自动部署脚本
fab -f deploy/fabfile.py production deploy
#线上全量回滚至某个版本
fab -f deploy/fabfile.py production rollback --set rollToVersion=SVN版本号

此代码的功能特点如下:

1,代码直接解压至目标版本文件夹。使用tar 的--strip-components 1选项。减少了有些发布先解压至tmp目录再进行处理的步骤。
2,发布时可通过修改exclude_list 设置哪些文件夹或文件不用发布至代码中
3,创建current软链时使用ln -sTf直接覆盖,减少一些发布中先删除current再创建的步骤。
4,发布脚本最后添加命令ls -tlr| head -n -8 | xargs sudo rm -rf 删除8个以外的代码版本。避免过多版本冗余
5,发布时提取SVN的版本号SVN_REVISION,存入版本文件夹名称中,从而实现回滚的时候可以实现所有服务器回滚至同一版本号。
6,服务器同时存在多个同一版本的代码,回滚至此版本也不会出错。

以下是完整的fabfile.py中的完整代码:

#! /usr/bin/python
#encoding=utf-8
#kermit@007.com


#jenkins平台中的Comman命令如下:
#自动部署脚本
#fab -f deploy/fabfile_new2019.py production deploy

#线上全量回滚至某个版本
#fab -f deploy/fabfile_new2019.py production rollback --set rollToVersion=SVN版本号

from fabric.api import *
import time
import os

# fab production deploy
env.app = '007_api'

#线上发布脚本
@task
def production():
    env.user = "007_jenkins"
    env.hosts = [
        '192.168.162.43',
        '192.168.162.44',
        '192.168.162.45',
        '192.168.162.46',
        ]
    env.password = '111111111111111'
    env.base_dir = "/opt/007_data"
    #线上部署时使用线上环境
    env.copyconfig = 2

#线上全量代码回滚
@task
def rollback():
    if not env.has_key('rollToVersion'):
        print('no must params:rollToVersion.')
    else:
        env.rollto = run("sudo ls -r %(base_dir)s/jenkins_revs | grep _%(toversion)s;" % { 'base_dir':env.base_dir ,'toversion':env.rollToVersion})
        if len(env.rollto) < 10:
            print('回滚失败,未找到版本号目录:' + env.rollToVersion)
        else:
            env.rollto = env.rollto.split()
            with cd(env.base_dir):
                run("ln -sTf jenkins_revs/%(rollto)s current;" % { 'rollto':env.rollto[0]})
            print('成功回滚至版本目录:' + env.rollto[0])

#全量发布
@task
def deploy():
    remote_floder = time.strftime('%Y%m%d%H%M%S') + '_' + os.getenv("SVN_REVISION");
    remote_dir = env.base_dir + '/jenkins_revs/';
    env.current_release = remote_dir + remote_floder;
    exclude_list = "{.svn,static}"
    upload_project(remote_dir=remote_dir, remote_floder = remote_floder, exclude=exclude_list)

    with cd(env.current_release):
        run("rm -rf static;ln -s /opt/wireless/static static;")
        #测试环境/线上环境部署时的配置文件
        if env.copyconfig==1:
            run("cp -f config.test.php config.php;")
        if env.copyconfig==2:
            run("cp -f config.online.php config.php;")

    with cd(env.base_dir):
        run("ln -sTf %(current_release)s current;sudo /etc/init.d/php-fpm reload;cd jenkins_revs;ls -tlr| head -n -8 | xargs sudo rm -rf" % {'current_release':env.current_release})

#代码部署上服务器
def upload_project(remote_dir="", remote_floder="", exclude=""):
    from tempfile import mkdtemp
    local_dir = os.getcwd()
    local_dir = local_dir.rstrip(os.sep)
    local_path, local_name = os.path.split(local_dir)
    tar_file = "%s.tar.gz" % local_name
    target_tar = os.path.join(remote_dir, tar_file)
    tmp_folder = mkdtemp()
 
    try:
        tar_path = os.path.join(tmp_folder, tar_file)
        cmd = "tar -czf %s -C %s %s --exclude=%s" % (tar_path, local_path, local_name, exclude)
        local(cmd)
        put(tar_path, target_tar)
        with cd(remote_dir):
            try:
                run("mkdir %s;tar -xzf %s -C %s  --strip-components 1" % (remote_floder, tar_file, remote_floder))
            finally:
                run("rm -f %s" % tar_file)
    finally:
        local("rm -rf %s" % tmp_folder)

二、linux进程永久放后台运行的命令之setsid

    &是用在命令结尾,表示放后台运行的命令,以防止终端一直被某个进程占用,但如果终端关闭,则进程也停止运行。所以为了避免任务丢失,有一个更常用的命令nohup。nohup是常用的将一个进程放在后台执行的命令,可以实现不挂断地运行命令。

使用语法:nohup Command [ Arg … ] [ & ]

    注:无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。两者放后后台都可以通过jobs -l命令列出作业或者ps命令查找出进程,然后通过kill停止作业进程,不过今天要介绍的是另外一个可以实现任务后台运行的命令:setsid

setsid命令的用法:

setsid [options] program [arguments]
[root@123 ~]# man setsid
SETSID(1)     Linux Programmer’s Manual      SETSID(1)
NAME
       setsid - run a program in a new session
SYNOPSIS
       setsid program [arg...]
DESCRIPTION
       setsid runs a program in a new session.
SEE ALSO
       setsid(2)
AUTHOR
       Rick Sladkey <jrs@world.std.com>
AVAILABILITY
       The setsid command is part of the util-linux-ng package and is available from ....
Linux 0.99                     20 November 1993                      SETSID(1)
[root@123 ~]# cat test.sh 
#!/bin/bash
while true
do
    echo `date +"%Y-%m-%d %H:%M.%S"` >> tt.log
    sleep 2
done
#使用setsid将命令加进后台,
[root@123 ~]# setsid ./test.sh 
[root@123 ~]# 
[root@123 ~]# jobs
[root@123 ~]# 
#关闭上面的ssh窗口,然后重开窗口查看tt.log依然在持续写入
[root@123 ~]# tail -f tt.log 
2019-06-06 16:23.33
2019-06-06 16:23.35
....

通过上面的使用可以看到:

1,执行setsid后会自动后台执行,并且后面不需要加&,
2,使用setsid和nohup一样,关闭当前ssh,进程依然会在执行。就相当于使用nohup ..&
3,使用setsid与nohup和&又不一样,setsid执行后不能通过jobs调用到,而要用ps查找
&不能忽略HUP信号,所以关闭ssh,命令也就会中止。nohup是通过忽略HUP信号来使我们的进程避免中途被中断,而setsid则让我们的进程不属于接受HUP信号的终端的子进程,所以也就不会受到HUP信号的影响了。

加点料:&不能让进程永久在后台执行,但是如果在命令前后加上()括起来,一样可以实现nohup ..&的功能。如下这样,命令就能永久在后台执行了。

[root@123 ~]# ( ./test.sh & )
[root@123 ~]# jobs
[root@123 ~]# 

三、Tengine/nginx模块大全和指令大全

    Tengine是由淘宝网发起的Web服务器项目,它是在Nginx的基础上针对大访问量网站的需求,添加了很多高级功能和特性,形成的一个高效、稳定、安全、易用的Web平台。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。Tengine官网地址:http://tengine.taobao.org/ 。Tengine压缩包很小,仅有2.3M,Tengine安装过程如下: 

[onev@BER ~]$ cd /opt/modules/download
[onlinedev@BFG-OSER-4288 download]$ mkdir -p /opt/modules/tengine/
[onlinedev@BFG-OSER-4288 download]$ sudo wget http://tengine.taobao.org/download/tengine-2.3.1.tar.gz
[onlinedev@BFG-OSER-4288 download]$ ll -h
total 2.3M
-rw-r--r-- 1 root root  2.3M Jun 26 17:46 tengine-2.3.1.tar.gz
[onlinedev@BFG-OSER-4288 download]$ sudo tar zxvf tengine-2.3.1.tar.gz 
[onlinedev@BFG-OSER-4288 download]$ cd tengine-2.3.1
[onlinedev@BFG-OSER-4288 download]$ sudo yum -y install pcre-devel  openssl openssl-devel
[onlinedev@BFG-OSER-4288 tengine-2.3.1]$ sudo ./configure --prefix=/opt/modules/tengine/; sudo make; sudo make install
[onlinedev@BFG-OSER-4288 tengine]$ sudo ln -s /opt/modules/tengine/sbin/nginx  /usr/bin/nginx
[onlinedev@BFG-OSER-4288 tengine]$ nginx -v
Tengine version: Tengine/2.3.1
nginx version: nginx/1.16.0

        Tengine有很多区别于nginx的特性,比如一个重要的动态加载特性:动态模块加载(DSO)支持。使得Tengine加入一个模块不再需要重新编译整个Tengine;而之前的nginx如果碰到这样的情况,就需要重新编译nginx,然后用新编译的nginx二进制文件替换原有文件。DSO这个模块不用每次都要重新编译Tengine.如果你想要编译官方模块为动态模块,你需要在configure的时候加上类似这样的指令(--with-http_xxx_module),./configure --help可以看到更多的细节.如果只想要安装官方模块为动态模块(不安装Nginx),那么就只需要configure之后,执行 make dso_install命令.

        DSO模块也有几个限制:动态加载模块的个数限制为128个,且只支持HTTP模块,另外如果已经加载的动态模块有修改,那么必须重起Tengine才会生效.

#. Tengine全部模块列表如下:

[onlinedev@BFG-OSER-4288 tengine]$ sudo nginx -m
Tengine version: Tengine/2.3.1
nginx version: nginx/1.16.0
nginx: loaded modules:
nginx:     ngx_core_module (static)
nginx:     ngx_errlog_module (static)
nginx:     ngx_conf_module (static)
nginx:     ngx_openssl_module (static)
nginx:     ngx_regex_module (static)
nginx:     ngx_events_module (static)
nginx:     ngx_event_core_module (static)
nginx:     ngx_epoll_module (static)
nginx:     ngx_procs_module (static)
nginx:     ngx_proc_core_module (static)
nginx:     ngx_http_module (static)
nginx:     ngx_http_core_module (static)
nginx:     ngx_http_log_module (static)
nginx:     ngx_http_upstream_module (static)
nginx:     ngx_http_static_module (static)
nginx:     ngx_http_autoindex_module (static)
nginx:     ngx_http_index_module (static)
nginx:     ngx_http_mirror_module (static)
nginx:     ngx_http_try_files_module (static)
nginx:     ngx_http_auth_request_module (static)
nginx:     ngx_http_auth_basic_module (static)
nginx:     ngx_http_access_module (static)
nginx:     ngx_http_limit_conn_module (static)
nginx:     ngx_http_limit_req_module (static)
nginx:     ngx_http_geo_module (static)
nginx:     ngx_http_map_module (static)
nginx:     ngx_http_split_clients_module (static)
nginx:     ngx_http_referer_module (static)
nginx:     ngx_http_rewrite_module (static)
nginx:     ngx_http_ssl_module (static)
nginx:     ngx_http_proxy_module (static)
nginx:     ngx_http_fastcgi_module (static)
nginx:     ngx_http_uwsgi_module (static)
nginx:     ngx_http_scgi_module (static)
nginx:     ngx_http_memcached_module (static)
nginx:     ngx_http_empty_gif_module (static)
nginx:     ngx_http_browser_module (static)
nginx:     ngx_http_upstream_hash_module (static)
nginx:     ngx_http_upstream_ip_hash_module (static)
nginx:     ngx_http_upstream_least_conn_module (static)
nginx:     ngx_http_upstream_random_module (static)
nginx:     ngx_http_upstream_keepalive_module (static)
nginx:     ngx_http_upstream_zone_module (static)
nginx:     ngx_http_stub_status_module (static)
nginx:     ngx_http_write_filter_module (static)
nginx:     ngx_http_header_filter_module (static)
nginx:     ngx_http_chunked_filter_module (static)
nginx:     ngx_http_range_header_filter_module (static)
nginx:     ngx_http_gzip_filter_module (static)
nginx:     ngx_http_postpone_filter_module (static)
nginx:     ngx_http_ssi_filter_module (static)
nginx:     ngx_http_charset_filter_module (static)
nginx:     ngx_http_userid_filter_module (static)
nginx:     ngx_http_headers_filter_module (static)
nginx:     ngx_http_copy_filter_module (static)
nginx:     ngx_http_range_body_filter_module (static)
nginx:     ngx_http_not_modified_filter_module (static)
nginx: the configuration file /opt/modules/tengine//conf/nginx.conf syntax is ok
nginx: configuration file /opt/modules/tengine//conf/nginx.conf test is successful

#. Tengine可用全部指令如下:

[onlinedev@BFG-OSER-4288 tengine]$ sudo nginx -l
Tengine version: Tengine/2.3.1
nginx version: nginx/1.16.0
nginx: all available directives:
nginx: ngx_core_module:
nginx:     daemon
nginx:     master_process
nginx:     timer_resolution
nginx:     pid
nginx:     lock_file
nginx:     worker_processes
nginx:     debug_points
nginx:     user
nginx:     worker_priority
nginx:     worker_cpu_affinity
nginx:     worker_rlimit_nofile
nginx:     worker_rlimit_core
nginx:     worker_shutdown_timeout
nginx:     working_directory
nginx:     env
nginx:     load_module
nginx:     master_env
nginx: ngx_errlog_module:
nginx:     error_log
nginx: ngx_conf_module:
nginx:     include
nginx: ngx_openssl_module:
nginx:     ssl_engine
nginx: ngx_regex_module:
nginx:     pcre_jit
nginx: ngx_events_module:
nginx:     events
nginx: ngx_event_core_module:
nginx:     worker_connections
nginx:     use
nginx:     multi_accept
nginx:     accept_mutex
nginx:     accept_mutex_delay
nginx:     debug_connection
nginx: ngx_epoll_module:
nginx:     epoll_events
nginx:     worker_aio_requests
nginx: ngx_procs_module:
nginx:     processes
nginx: ngx_proc_core_module:
nginx:     process
nginx:     count
nginx:     priority
nginx:     delay_start
nginx:     respawn
nginx: ngx_http_module:
nginx:     http
nginx: ngx_http_core_module:
nginx:     variables_hash_max_size
nginx:     variables_hash_bucket_size
nginx:     server_names_hash_max_size
nginx:     server_names_hash_bucket_size
nginx:     server
nginx:     connection_pool_size
nginx:     request_pool_size
nginx:     client_header_timeout
nginx:     client_header_buffer_size
nginx:     large_client_header_buffers
nginx:     ignore_invalid_headers
nginx:     merge_slashes
nginx:     underscores_in_headers
nginx:     location
nginx:     listen
nginx:     server_name
nginx:     types_hash_max_size
nginx:     types_hash_bucket_size
nginx:     types
nginx:     default_type
nginx:     root
nginx:     alias
nginx:     limit_except
nginx:     client_max_body_size
nginx:     client_body_buffer_size
nginx:     client_body_buffers
nginx:     client_body_postpone_size
nginx:     client_body_timeout
nginx:     client_body_temp_path
nginx:     client_body_in_file_only
nginx:     client_body_in_single_buffer
nginx:     retry_cached_connection
nginx:     sendfile
nginx:     sendfile_max_chunk
nginx:     subrequest_output_buffer_size
nginx:     aio
nginx:     aio_write
nginx:     read_ahead
nginx:     directio
nginx:     directio_alignment
nginx:     tcp_nopush
nginx:     tcp_nodelay
nginx:     send_timeout
nginx:     send_lowat
nginx:     postpone_output
nginx:     limit_rate
nginx:     limit_rate_after
nginx:     keepalive_timeout
nginx:     keepalive_requests
nginx:     keepalive_disable
nginx:     satisfy
nginx:     internal
nginx:     lingering_close
nginx:     lingering_time
nginx:     lingering_timeout
nginx:     reset_timedout_connection
nginx:     absolute_redirect
nginx:     server_name_in_redirect
nginx:     port_in_redirect
nginx:     msie_padding
nginx:     msie_refresh
nginx:     log_not_found
nginx:     log_subrequest
nginx:     recursive_error_pages
nginx:     request_time_cache
nginx:     server_tokens
nginx:     server_tag
nginx:     if_modified_since
nginx:     max_ranges
nginx:     chunked_transfer_encoding
nginx:     etag
nginx:     error_page
nginx:     post_action
nginx:     error_log
nginx:     open_file_cache
nginx:     open_file_cache_valid
nginx:     open_file_cache_min_uses
nginx:     open_file_cache_errors
nginx:     open_file_cache_events
nginx:     resolver
nginx:     resolver_file
nginx:     resolver_timeout
nginx:     server_admin
nginx:     server_info
nginx:     gzip_vary
nginx:     gzip_http_version
nginx:     gzip_proxied
nginx:     gzip_disable
nginx:     disable_symlinks
nginx: ngx_http_log_module:
nginx:     log_format
nginx:     access_log
nginx:     open_log_file_cache
nginx: ngx_http_upstream_module:
nginx:     upstream
nginx:     server
nginx: ngx_http_static_module:
nginx: ngx_http_autoindex_module:
nginx:     autoindex
nginx:     autoindex_format
nginx:     autoindex_localtime
nginx:     autoindex_exact_size
nginx: ngx_http_index_module:
nginx:     index
nginx: ngx_http_mirror_module:
nginx:     mirror
nginx:     mirror_request_body
nginx: ngx_http_try_files_module:
nginx:     try_files
nginx: ngx_http_auth_request_module:
nginx:     auth_request
nginx:     auth_request_set
nginx: ngx_http_auth_basic_module:
nginx:     auth_basic
nginx:     auth_basic_user_file
nginx: ngx_http_access_module:
nginx:     allow
nginx:     deny
nginx: ngx_http_limit_conn_module:
nginx:     limit_conn_zone
nginx:     limit_conn
nginx:     limit_conn_log_level
nginx:     limit_conn_status
nginx: ngx_http_limit_req_module:
nginx:     limit_req_zone
nginx:     limit_req
nginx:     limit_req_log_level
nginx:     limit_req_status
nginx:     limit_req_whitelist
nginx: ngx_http_geo_module:
nginx:     geo
nginx: ngx_http_map_module:
nginx:     map
nginx:     map_hash_max_size
nginx:     map_hash_bucket_size
nginx: ngx_http_split_clients_module:
nginx:     split_clients
nginx: ngx_http_referer_module:
nginx:     valid_referers
nginx:     referer_hash_max_size
nginx:     referer_hash_bucket_size
nginx: ngx_http_rewrite_module:
nginx:     rewrite
nginx:     return
nginx:     break
nginx:     if
nginx:     set
nginx:     rewrite_log
nginx:     uninitialized_variable_warn
nginx: ngx_http_ssl_module:
nginx:     ssl
nginx:     ssl_certificate
nginx:     ssl_certificate_key
nginx:     ssl_password_file
nginx:     ssl_dhparam
nginx:     ssl_ecdh_curve
nginx:     ssl_protocols
nginx:     ssl_ciphers
nginx:     ssl_buffer_size
nginx:     ssl_verify_client
nginx:     ssl_verify_client_exception
nginx:     ssl_verify_depth
nginx:     ssl_client_certificate
nginx:     ssl_trusted_certificate
nginx:     ssl_prefer_server_ciphers
nginx:     ssl_session_cache
nginx:     ssl_session_tickets
nginx:     ssl_session_ticket_key
nginx:     ssl_session_timeout
nginx:     ssl_crl
nginx:     ssl_stapling
nginx:     ssl_stapling_file
nginx:     ssl_stapling_responder
nginx:     ssl_stapling_verify
nginx:     ssl_early_data
nginx: ngx_http_proxy_module:
nginx:     proxy_pass
nginx:     proxy_redirect
nginx:     proxy_cookie_domain
nginx:     proxy_cookie_path
nginx:     proxy_store
nginx:     proxy_store_access
nginx:     proxy_buffering
nginx:     proxy_request_buffering
nginx:     proxy_ignore_client_abort
nginx:     proxy_bind
nginx:     proxy_socket_keepalive
nginx:     proxy_connect_timeout
nginx:     proxy_send_timeout
nginx:     proxy_send_lowat
nginx:     proxy_intercept_errors
nginx:     proxy_set_header
nginx:     proxy_headers_hash_max_size
nginx:     proxy_headers_hash_bucket_size
nginx:     proxy_set_body
nginx:     proxy_method
nginx:     proxy_pass_request_headers
nginx:     proxy_pass_request_body
nginx:     proxy_buffer_size
nginx:     proxy_read_timeout
nginx:     proxy_buffers
nginx:     proxy_busy_buffers_size
nginx:     proxy_force_ranges
nginx:     proxy_limit_rate
nginx:     proxy_cache
nginx:     proxy_cache_key
nginx:     proxy_cache_path
nginx:     proxy_cache_bypass
nginx:     proxy_no_cache
nginx:     proxy_cache_valid
nginx:     proxy_cache_min_uses
nginx:     proxy_cache_max_range_offset
nginx:     proxy_cache_use_stale
nginx:     proxy_cache_methods
nginx:     proxy_cache_lock
nginx:     proxy_cache_lock_timeout
nginx:     proxy_cache_lock_age
nginx:     proxy_cache_revalidate
nginx:     proxy_cache_convert_head
nginx:     proxy_cache_background_update
nginx:     proxy_temp_path
nginx:     proxy_max_temp_file_size
nginx:     proxy_temp_file_write_size
nginx:     proxy_next_upstream
nginx:     proxy_next_upstream_tries
nginx:     proxy_upstream_tries
nginx:     proxy_next_upstream_timeout
nginx:     proxy_pass_header
nginx:     proxy_hide_header
nginx:     proxy_ignore_headers
nginx:     proxy_http_version
nginx:     proxy_ssl_session_reuse
nginx:     proxy_ssl_protocols
nginx:     proxy_ssl_ciphers
nginx:     proxy_ssl_name
nginx:     proxy_ssl_server_name
nginx:     proxy_ssl_verify
nginx:     proxy_ssl_verify_depth
nginx:     proxy_ssl_trusted_certificate
nginx:     proxy_ssl_crl
nginx:     proxy_ssl_certificate
nginx:     proxy_ssl_certificate_key
nginx:     proxy_ssl_password_file
nginx: ngx_http_fastcgi_module:
nginx:     fastcgi_pass
nginx:     fastcgi_index
nginx:     fastcgi_split_path_info
nginx:     fastcgi_store
nginx:     fastcgi_store_access
nginx:     fastcgi_buffering
nginx:     fastcgi_request_buffering
nginx:     fastcgi_ignore_client_abort
nginx:     fastcgi_bind
nginx:     fastcgi_socket_keepalive
nginx:     fastcgi_connect_timeout
nginx:     fastcgi_send_timeout
nginx:     fastcgi_send_lowat
nginx:     fastcgi_buffer_size
nginx:     fastcgi_pass_request_headers
nginx:     fastcgi_pass_request_body
nginx:     fastcgi_intercept_errors
nginx:     fastcgi_read_timeout
nginx:     fastcgi_buffers
nginx:     fastcgi_busy_buffers_size
nginx:     fastcgi_force_ranges
nginx:     fastcgi_limit_rate
nginx:     fastcgi_cache
nginx:     fastcgi_cache_key
nginx:     fastcgi_cache_path
nginx:     fastcgi_cache_bypass
nginx:     fastcgi_no_cache
nginx:     fastcgi_cache_valid
nginx:     fastcgi_cache_min_uses
nginx:     fastcgi_cache_max_range_offset
nginx:     fastcgi_cache_use_stale
nginx:     fastcgi_cache_methods
nginx:     fastcgi_cache_lock
nginx:     fastcgi_cache_lock_timeout
nginx:     fastcgi_cache_lock_age
nginx:     fastcgi_cache_revalidate
nginx:     fastcgi_cache_background_update
nginx:     fastcgi_temp_path
nginx:     fastcgi_max_temp_file_size
nginx:     fastcgi_temp_file_write_size
nginx:     fastcgi_next_upstream
nginx:     fastcgi_next_upstream_tries
nginx:     fastcgi_upstream_tries
nginx:     fastcgi_next_upstream_timeout
nginx:     fastcgi_param
nginx:     fastcgi_pass_header
nginx:     fastcgi_hide_header
nginx:     fastcgi_ignore_headers
nginx:     fastcgi_catch_stderr
nginx:     fastcgi_keep_conn
nginx: ngx_http_uwsgi_module:
nginx:     uwsgi_pass
nginx:     uwsgi_modifier1
nginx:     uwsgi_modifier2
nginx:     uwsgi_store
nginx:     uwsgi_store_access
nginx:     uwsgi_buffering
nginx:     uwsgi_request_buffering
nginx:     uwsgi_ignore_client_abort
nginx:     uwsgi_bind
nginx:     uwsgi_socket_keepalive
nginx:     uwsgi_connect_timeout
nginx:     uwsgi_send_timeout
nginx:     uwsgi_buffer_size
nginx:     uwsgi_pass_request_headers
nginx:     uwsgi_pass_request_body
nginx:     uwsgi_intercept_errors
nginx:     uwsgi_read_timeout
nginx:     uwsgi_buffers
nginx:     uwsgi_busy_buffers_size
nginx:     uwsgi_force_ranges
nginx:     uwsgi_limit_rate
nginx:     uwsgi_cache
nginx:     uwsgi_cache_key
nginx:     uwsgi_cache_path
nginx:     uwsgi_cache_bypass
nginx:     uwsgi_no_cache
nginx:     uwsgi_cache_valid
nginx:     uwsgi_cache_min_uses
nginx:     uwsgi_cache_max_range_offset
nginx:     uwsgi_cache_use_stale
nginx:     uwsgi_cache_methods
nginx:     uwsgi_cache_lock
nginx:     uwsgi_cache_lock_timeout
nginx:     uwsgi_cache_lock_age
nginx:     uwsgi_cache_revalidate
nginx:     uwsgi_cache_background_update
nginx:     uwsgi_temp_path
nginx:     uwsgi_max_temp_file_size
nginx:     uwsgi_temp_file_write_size
nginx:     uwsgi_next_upstream
nginx:     uwsgi_next_upstream_tries
nginx:     uwsgi_next_upstream_timeout
nginx:     uwsgi_upstream_tries
nginx:     uwsgi_param
nginx:     uwsgi_string
nginx:     uwsgi_pass_header
nginx:     uwsgi_hide_header
nginx:     uwsgi_ignore_headers
nginx:     uwsgi_ssl_session_reuse
nginx:     uwsgi_ssl_protocols
nginx:     uwsgi_ssl_ciphers
nginx:     uwsgi_ssl_name
nginx:     uwsgi_ssl_server_name
nginx:     uwsgi_ssl_verify
nginx:     uwsgi_ssl_verify_depth
nginx:     uwsgi_ssl_trusted_certificate
nginx:     uwsgi_ssl_crl
nginx:     uwsgi_ssl_certificate
nginx:     uwsgi_ssl_certificate_key
nginx:     uwsgi_ssl_password_file
nginx: ngx_http_scgi_module:
nginx:     scgi_pass
nginx:     scgi_store
nginx:     scgi_store_access
nginx:     scgi_buffering
nginx:     scgi_request_buffering
nginx:     scgi_ignore_client_abort
nginx:     scgi_bind
nginx:     scgi_socket_keepalive
nginx:     scgi_connect_timeout
nginx:     scgi_send_timeout
nginx:     scgi_buffer_size
nginx:     scgi_pass_request_headers
nginx:     scgi_pass_request_body
nginx:     scgi_intercept_errors
nginx:     scgi_read_timeout
nginx:     scgi_buffers
nginx:     scgi_busy_buffers_size
nginx:     scgi_force_ranges
nginx:     scgi_limit_rate
nginx:     scgi_cache
nginx:     scgi_cache_key
nginx:     scgi_cache_path
nginx:     scgi_cache_bypass
nginx:     scgi_no_cache
nginx:     scgi_cache_valid
nginx:     scgi_cache_min_uses
nginx:     scgi_cache_max_range_offset
nginx:     scgi_cache_use_stale
nginx:     scgi_cache_methods
nginx:     scgi_cache_lock
nginx:     scgi_cache_lock_timeout
nginx:     scgi_cache_lock_age
nginx:     scgi_cache_revalidate
nginx:     scgi_cache_background_update
nginx:     scgi_temp_path
nginx:     scgi_max_temp_file_size
nginx:     scgi_temp_file_write_size
nginx:     scgi_next_upstream
nginx:     scgi_upstream_tries
nginx:     scgi_next_upstream_tries
nginx:     scgi_next_upstream_timeout
nginx:     scgi_param
nginx:     scgi_pass_header
nginx:     scgi_hide_header
nginx:     scgi_ignore_headers
nginx: ngx_http_memcached_module:
nginx:     memcached_pass
nginx:     memcached_bind
nginx:     memcached_socket_keepalive
nginx:     memcached_connect_timeout
nginx:     memcached_send_timeout
nginx:     memcached_buffer_size
nginx:     memcached_read_timeout
nginx:     memcached_next_upstream
nginx:     memcached_next_upstream_tries
nginx:     memcached_next_upstream_timeout
nginx:     memcached_gzip_flag
nginx:     memcached_upstream_tries
nginx: ngx_http_empty_gif_module:
nginx:     empty_gif
nginx: ngx_http_browser_module:
nginx:     modern_browser
nginx:     ancient_browser
nginx:     modern_browser_value
nginx:     ancient_browser_value
nginx: ngx_http_upstream_hash_module:
nginx:     hash
nginx: ngx_http_upstream_ip_hash_module:
nginx:     ip_hash
nginx: ngx_http_upstream_least_conn_module:
nginx:     least_conn
nginx: ngx_http_upstream_random_module:
nginx:     random
nginx: ngx_http_upstream_keepalive_module:
nginx:     keepalive
nginx:     keepalive_timeout
nginx:     keepalive_requests
nginx: ngx_http_upstream_zone_module:
nginx:     zone
nginx: ngx_http_stub_status_module:
nginx:     stub_status
nginx: ngx_http_write_filter_module:
nginx: ngx_http_header_filter_module:
nginx: ngx_http_chunked_filter_module:
nginx: ngx_http_range_header_filter_module:
nginx: ngx_http_gzip_filter_module:
nginx:     gzip
nginx:     gzip_buffers
nginx:     gzip_types
nginx:     gzip_comp_level
nginx:     gzip_window
nginx:     gzip_hash
nginx:     postpone_gzipping
nginx:     gzip_no_buffer
nginx:     gzip_min_length
nginx:     gzip_clear_etag
nginx: ngx_http_postpone_filter_module:
nginx: ngx_http_ssi_filter_module:
nginx:     ssi
nginx:     ssi_silent_errors
nginx:     ssi_ignore_recycled_buffers
nginx:     ssi_min_file_chunk
nginx:     ssi_value_length
nginx:     ssi_types
nginx:     ssi_last_modified
nginx: ngx_http_charset_filter_module:
nginx:     charset
nginx:     source_charset
nginx:     override_charset
nginx:     charset_types
nginx:     charset_map
nginx: ngx_http_userid_filter_module:
nginx:     userid
nginx:     userid_service
nginx:     userid_name
nginx:     userid_domain
nginx:     userid_path
nginx:     userid_expires
nginx:     userid_p3p
nginx:     userid_mark
nginx: ngx_http_headers_filter_module:
nginx:     expires
nginx:     add_header
nginx:     add_trailer
nginx: ngx_http_copy_filter_module:
nginx:     output_buffers
nginx: ngx_http_range_body_filter_module:
nginx: ngx_http_not_modified_filter_module:
nginx: the configuration file /opt/modules/tengine//conf/nginx.conf syntax is ok
nginx: configuration file /opt/modules/tengine//conf/nginx.conf test is successful

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林戈的IT生涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值