一、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