• 关于

    $_ENV

    的搜索结果

回答

这个错误提示的意思是数据库接入的账号和密码不匹配。数据库的配置信息是通过环境变量获取的,建议可以写一个php用于获取自己的这几个变量,可以把页面看到的变量再配置到需要的配置文件中,其中,ak和sk分别对应用户使用数据库时需要传入的用户名和密码的。 $host = getenv('HTTP_BAE_ENV_ADDR_SQL_IP'); $port = getenv('HTTP_BAE_ENV_ADDR_SQL_PORT'); $user = getenv('HTTP_BAE_ENV_AK'); $pwd = getenv('HTTP_BAE_ENV_SK'); 下面这个php可以直接放到应用下调用显示,看看是否可以正确显示相关信息,其中dbname需要修改为应用下授权的数据库名称。 <?php /*数据库名称*/ $dbname = 'RKpKDLWugItRJWDbNMhL'; /*从环境变量里取出数据库连接需要的参数*/ $host = getenv('HTTP_BAE_ENV_ADDR_SQL_IP'); $port = getenv('HTTP_BAE_ENV_ADDR_SQL_PORT'); $user = getenv('HTTP_BAE_ENV_AK'); $pwd = getenv('HTTP_BAE_ENV_SK'); echo $host. "<br>"; echo $port. "<br>"; echo $user. "<br>"; echo $pwd; ?>

落地花开啦 2019-12-02 02:44:26 0 浏览量 回答数 0

问题

eval()函数中的节点process.env变量给出了不同的结果

k8s小能手 2019-12-01 19:26:36 384 浏览量 回答数 1

问题

关于获取钉钉Accesstoken问题

彭发红 2019-12-01 21:34:29 6298 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

问题

Linux 运行有依赖的Jar失败

a123456678 2019-12-01 20:09:09 980 浏览量 回答数 1

回答

nginx配置:修改部分如下: server { listen 80; server_name 10.60.82.72; server_name stf.ovwane.com; keepalive_timeout 70; resolver 114.114.114.114 8.8.8.8 valid=300s; resolver_timeout 10s; location ~ "^/d/stfpro1/([^/]+)/(?<port>[0-9]{5})/$" { proxy_pass http://10.60.103.71:$port/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Real-IP $remote_addr; } location ~ "^/d/stfpro2/([^/]+)/(?<port>[0-9]{5})/$" { proxy_pass http://10.60.114.29:$port/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Real-IP $remote_addr; } location ~ "^/d/demo1/([^/]+)/(?<port>[0-9]{5})/$"{ proxy_pass http://10.60.145.18:$port/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Real-IP $remote_addr; } stf服务端,.env: STF_VERSION=3.4.0 STF_HOST=10.60.82.72 STF_URL=http://10.60.82.72 STF_IMAGE=openstf/stf:v3.4.0 STF_SECRET=RETHINKDBAUTHKEYANY provider设置 iSTF_VERSION=3.4.0 STF_HOST=10.60.82.72 STF_URL=http://10.60.82.72 STF_IMAGE=openstf/stf:v3.4.0 STF_PROVIDER=stfpro1 stf master页面: provider设备: 而且master与provider之间的连接正常:

游客6j3ztv6vbre5k 2020-01-07 15:13:05 0 浏览量 回答数 0

回答

您需要从令牌生成kubeconfig。 !/ usr / bin / env bash Copyright 2017, Z Lab Corporation. All rights reserved. Copyright 2017, Kubernetes scripts contributors For the full copyright and license information, please view the LICENSE file that was distributed with this source code. set -e if [[ $# == 0 ]]; then echo "Usage: $0 SERVICEACCOUNT [kubectl options]" >&2 echo "" >&2 echo "This script creates a kubeconfig to access the apiserver with the specified serviceaccount and outputs it to stdout." >&2 exit 1fi function _kubectl() { kubectl $@ $kubectl_options} serviceaccount="$1"kubectl_options="${@:2}" if ! secret="$(_kubectl get serviceaccount "$serviceaccount" -o 'jsonpath={.secrets[0].name}' 2>/dev/null)"; then echo "serviceaccounts "$serviceaccount" not found." >&2 exit 2fi if [[ -z "$secret" ]]; then echo "serviceaccounts "$serviceaccount" doesn't have a serviceaccount token." >&2 exit 2fi context context="$(_kubectl config current-context)" cluster cluster="$(_kubectl config view -o "jsonpath={.contexts[?(@.name==\"$context")].context.cluster}")"server="$(_kubectl config view -o "jsonpath={.clusters[?(@.name==\"$cluster")].cluster.server}")" token ca_crt_data="$(_kubectl get secret "$secret" -o "jsonpath={.data.ca.crt}" | openssl enc -d -base64 -A)"namespace="$(_kubectl get secret "$secret" -o "jsonpath={.data.namespace}" | openssl enc -d -base64 -A)"token="$(_kubectl get secret "$secret" -o "jsonpath={.data.token}" | openssl enc -d -base64 -A)" export KUBECONFIG="$(mktemp)"kubectl config set-credentials "$serviceaccount" --token="$token" >/dev/nullca_crt="$(mktemp)"; echo "$ca_crt_data" > $ca_crtkubectl config set-cluster "$cluster" --server="$server" --certificate-authority="$ca_crt" --embed-certs >/dev/nullkubectl config set-context "$context" --cluster="$cluster" --namespace="$namespace" --user="$serviceaccount" >/dev/nullkubectl config use-context "$context" >/dev/null cat "$KUBECONFIG"

k8s小能手 2019-12-02 01:57:06 0 浏览量 回答数 0

回答

在我开时打开模式不一样:apache的.htaccess配置文件是以:RewriteEngine On 将写模式打开。Apache伪静态html(URL Rewrite)设置法phpma一 打开 Apache 的配置文件 httpd.conf 。phpma二 将#LoadModule rewrite_module modules/mod_rewrite前面的#去掉phpma三 在 httpd.conf中添加: RewriteEngine On #RewriteCond %{ENV:SCRIPT_URL} (?:index|dispbbs)[-0-9]+.html RewriteRule ^(.*?(?:index|dispbbs))-([-0-9]+).html$ $1.php? __is_apache_rewrite=1&__rewrite_arg=$2iis的httpd.ini配置文件是以:[ISAPI_Rewrite] 将写模式打开。打开你的httpd.ini,找到[ISAPI_Rewrite] 3600 = 1 hour CacheClockRate 3600RepeatLimit 32 Protect httpd.ini and httpd.parse.errors files from accessing through HTTP RewriteRule ^(.*)/archiver/([a-z0-9-]+.html)$ $1/archiver/index.php?$2 RewriteRule ^(.*)/forum-([0-9]+)-([0-9]+).html$ $1/forumdisplay.php?fid=$2&page=$3 RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+).html$ $1/viewthread.php?tid=$2&extra=page%3D$4&page=$3 RewriteRule ^(.*)/profile-(username|uid)-(.+?).html$ $1/viewpro.php?$2=$3

我的中国 2019-12-02 01:33:21 0 浏览量 回答数 0

回答

您可以将sh包裹在““” ...“”“中,如下所示 #!/usr/bin/env groovy def config pipeline { agent { label "master" } stages { stage ('Validation of commands') { steps { script { sh """#!/bin/sh /usr/bin/sshpass -p password ssh username@hostname << EOF COMMANDS_TO_CHECK="curl grep hello awk tr mkdir bc" hostname echo \$COMMANDS_TO_CHECK for CURRENT_COMMAND in \$COMMANDS_TO_CHECK do echo \$CURRENT_COMMAND which \$CURRENT_COMMAND status=\$? if [ \${status} -eq 0 ] then echo \${CURRENT_COMMAND} command is OK else echo "Failed to find the \${CURRENT_COMMAND} command" fi done hostname EOF exit """ } } } } }

祖安文状元 2020-01-08 15:31:37 0 浏览量 回答数 0

回答

能贴出一段登录失败的日志吗?用cat,grep,awk几个命令是可以实现的,不知道具体格式不能正确写出匹配shell 2016-5-14 10:01:36 补充一个脚本。 创建一个log_login_by_ip.sh文件,内容如下: #!/bin/bash clear if [[ $# -eq 0 ]] then week=(`env LANG=en_US.UTF-8 date '+%a'`) month=(`env LANG=en_US.UTF-8 date '+%b'`) day=(`env LANG=en_US.UTF-8 date '+%d' | grep -ioP "[1-9]+"`) # test data #week=Fri #month=May #day=13 lastb -a|grep -iE $week"[ ]+"$month"[ ]+"$day|awk -F"[ ]+" '{print $NF}'|sort|uniq fi

a123456678 2019-12-02 02:59:41 0 浏览量 回答数 0

问题

从Gitlab CI构建Docker映像时环境变量丢失

养狐狸的猫 2019-12-01 19:58:48 15 浏览量 回答数 0

回答

把报错的那部分代码粘出来已经贴出来了,就是11,12,13行,这个脚本我看了下没错,make到16行的时候就停止了。这个脚本是源代码中的脚本<spanstyle="font-family:Consolas,'BitstreamVeraSansMono','CourierNew',Courier,monospace;line-height:14.659090995788574px;background-color:#FFFFFF;">../tools/add_marshalling.pl文件的63行前后贴一下<preclass="brush:perl;toolbar:true;auto-links:false;">6162FILE:for$file(@ARGV){63open(IN,"<$file")ornextFILE;64undef$/;65$=<IN>;66$/="\n";67closeIN;68print"scanning$file\n";6970$done=0;71if(s/#include"([^"]+)"/#include"$1"\n#include<server-marshal.h>\n/s){$done++;}72if(s/adb(\w+)t*axis2_skel(\w+)(\w+)(([^)]+)adb(\w+)t*(\w+)[^}]+TODO[^}]+}/adb$1_taxis2_skel_$2_$3($4adb_$5_t$6)\n{return(${3}Marshal($6,env));}/sg){$done++;}73if(s/adb_(\w+)t*axis2_skel(\w+)(\w+)(constaxutil_env_t*env[^}]+TODO[^}]+}/adb$1_t*axis2_skel_$2_$3(constaxutil_env_t*env)\n{return(${3}Marshal(env));}/sg){$done++;}74if(s//*Anyinitializationstuffofaxis2_.goeshere*//adb_InitService();\n/sg){$done++;}7576if($done)77{7879print"modifying$file\n";80system"cp$file$file~";81open(OUT,">$file")ordie"couldnotoverwrite$file";82printOUT;83closeOUT;84}85} 这是那个脚本的代码 这段代码本身是没有问题的有可能是这个脚本传入的参数有问题,你在for$file(<aclass='referer'target='_blank'>@ARGV)一行之前加入useData::Dumper;printDumper(@ARGV);把脚本的输入参数打印出来看看FILE:for$file(<aclass='referer'target='blank'>@ARGV){#轮循读入的参数,并且把轮循到结果依次赋值给$file,输入的参数应该是一系列的文件名称  open(IN,"<$file")ornextFILE;#打开文件的句柄  undef$/;#把内部默认变量$/设置为undef,$/定义的是文件的结束分割符  $=<IN>;#读入句柄的输入内容  $/="\n";#设置文件分割符为换行  closeIN;#关闭文件句柄  print"scanning$file\n";#输出指定的文件名称你可以参考上面的注释进行调试,看看输入的参数是不是有特殊字符了,我觉得有可能是这样。 我在脚本的61行添加了”<spanstyle="color:#444444;font-family:微软雅黑,Verdana,sans-serif,宋体;font-size:14px;line-height:normal;background-color:#FFFFFF;">useData::Dumper;printDumper(@ARGV);“。重新make还是报错,并没有打印出输入的参数,是我添加的方式不对吗?调试脚本是单独调试吗?非常感谢你的帮助!你make clean一下,然后重新make试试<divclass="linealt2"> ./tools/add_marshalling.pl:line63:syntaxerrornearunexpectedtoken('</td></tr></tbody></table>这个是安装报错的地方我是这样修改的<spanstyle="font-family:微软雅黑,Verdana,sans-serif,宋体;font-size:14px;line-height:normal;background-color:#FFFFFF;">add_marshalling.pl</span>脚本<preclass="brush:perl;toolbar:true;auto-links:false;">63useData::Dumper;printDumper(\@ARGV);64FILE:usefor$file(@ARGV){65open(IN,"<$file")ornextFILE;66undef$/;67$_=<IN>;68$/="\n";69closeIN;70print"scanning$file\n";</pre><p>makeclean</p><p>make</p><p>报错信息为</p><p></p><preclass="brush:perl;toolbar:true;auto-links:false;">rm-rfgeneratedmkdir-pgeneratedGeneratingclientstubssh/opt/euca-WSDL2C.sh-uri../wsdl//eucalyptus_gl.wsdl-g-dadb-u-uw-f-ogenerated|grep-v'theclasspath'Retrievingdocumentat'../wsdl//eucalyptus_gl.wsdl'.Generatingserverstubssh/opt/euca-WSDL2C.sh-uri../wsdl//eucalyptus_gl.wsdl-sd-ss-dadb-u-uw-f-ogenerated|grep-v'theclasspath'Retrievingdocumentat'../wsdl//eucalyptus_gl.wsdl'.Addingmarshallingcallstoserverstubs../tools/add_marshalling.plgenerated/axis2_skel_*.c../tools/add_marshalling.pl:line63:syntaxerrornearunexpectedtoken('../tools/add_marshalling.pl:line63:useData::Dumper;printDumper(\@ARGV);'make[1]:***[generated/stubs]Error2make[1]:Leavingdirectory/eucalyptus-3.4.2/gatherlog'make:**[build]Error2你把<spanstyle="font-family:Verdana,sans-serif,宋体;line-height:normal;background-color:#FFFFFF;"> <spanstyle="font-size:14px;line-height:normal;font-family:微软雅黑,Verdana,sans-serif,宋体;background-color:#FFFFFF;">add_marshalling.pl脚本63行前面部分贴一下

爱吃鱼的程序员 2020-06-22 11:33:06 0 浏览量 回答数 0

回答

使用.env> = 5.0(在5.5上测试) 在 .env DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=database1 DB_USERNAME=root DB_PASSWORD=secret DB_CONNECTION_SECOND=mysql DB_HOST_SECOND=127.0.0.1 DB_PORT_SECOND=3306 DB_DATABASE_SECOND=database2 DB_USERNAME_SECOND=root DB_PASSWORD_SECOND=secret 在 config/database.php 'mysql' => [ 'driver' => env('DB_CONNECTION'), 'host' => env('DB_HOST'), 'port' => env('DB_PORT'), 'database' => env('DB_DATABASE'), 'username' => env('DB_USERNAME'), 'password' => env('DB_PASSWORD'), ], 'mysql2' => [ 'driver' => env('DB_CONNECTION_SECOND'), 'host' => env('DB_HOST_SECOND'), 'port' => env('DB_PORT_SECOND'), 'database' => env('DB_DATABASE_SECOND'), 'username' => env('DB_USERNAME_SECOND'), 'password' => env('DB_PASSWORD_SECOND'), ], 注:在mysql2如果DB_username和DB_PASSWORD是一样的,那么你可以使用env('DB_USERNAME')它在文件档案化.env的前几行。 没有.env<5.0 定义连接 app/config/database.php return array( 'default' => 'mysql', 'connections' => array( # Primary/Default database connection 'mysql' => array( 'driver' => 'mysql', 'host' => '127.0.0.1', 'database' => 'database1', 'username' => 'root', 'password' => 'secret' 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ), # Secondary database connection 'mysql2' => array( 'driver' => 'mysql', 'host' => '127.0.0.1', 'database' => 'database2', 'username' => 'root', 'password' => 'secret' 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ), ), ); 架构图 要指定使用哪个连接,只需运行connection()方法 Schema::connection('mysql2')->create('some_table', function($table) { $table->increments('id'): }); 查询生成器 $users = DB::connection('mysql2')->select(...); 雄辩 $connection在模型中设置变量 class SomeModel extends Eloquent { protected $connection = 'mysql2'; } 您还可以通过setConnection方法或on静态方法在运行时定义连接: class SomeController extends BaseController { public function someMethod() { $someModel = new SomeModel; $someModel->setConnection('mysql2'); // non-static method $something = $someModel->find(1); $something = SomeModel::on('mysql2')->find(1); // static method return $something; } } 注意在尝试与数据库之间的表建立关系时要小心!可以这样做,但可能会带来一些警告,并取决于您拥有的数据库和/或数据库设置。 来自Laravel Docs 使用多个数据库连接 使用多个连接时,可以connection通过DB立面上的连接方法进行访问。在name传递给connection方法应该对应于您列出的其中一个连接config/database.php配置文件: $users = DB::connection('foo')->select(...); 您还可以在连接实例上使用getPdo方法访问原始的基础PDO实例: $pdo = DB::connection()->getPdo(); 有用的链接 Laravel 5多数据库连接FROM laracasts.com 在laravel FROM中连接多个数据库 tutsnare.com Laravel FROM中的多个数据库连接 fideloper.com来源:stack overflow

保持可爱mmm 2020-05-10 17:51:05 0 浏览量 回答数 0

回答

已经解决:只要将第一行的代码改为下述代码即可:#!/bin/bash 原因是Solaris使用sh<spanstyle="line-height:1.5;font-size:10pt;">来打开这个文件的话不支持cd-这种指令 .sh文件时有系统shell执行的,跟java有什么关系,可以把carte.sh文件内容贴出来看看 <spanstyle="font-family:微软雅黑,Verdana,sans-serif,宋体;font-size:14px;line-height:normal;background-color:#FFFFFF;">carte.sh文件,是kettle这边通用的脚本,我比较过,官方的安装包都是一样的脚本代码<preclass="brush:shell;toolbar:true;auto-links:false;">#!/bin/sh#************************************** #LibrariesusedbyKettle:#************************************************BASEDIR=dirname$0cd$BASEDIRDIR=pwdcd-."$DIR/set-pentaho-env.sh"setPentahoEnvCLASSPATH=$BASEDIRCLASSPATH=$CLASSPATH:$BASEDIR/lib/kettle-core.jarCLASSPATH=$CLASSPATH:$BASEDIR/lib/kettle-db.jarCLASSPATH=$CLASSPATH:$BASEDIR/lib/kettle-engine.jar#******************************************#JDBC&otherlibrariesusedbyKettle:#**********************************************forfinfind$BASEDIR/libext-typef-name"*.jar"``find$BASEDIR/libext-typef-name"*.zip"doCLASSPATH=$CLASSPATH:$fdone#**********************************************************#Setjavaruntimeoptions#Change512mtohighervaluesincaseyourunoutofmemory#orsetthePENTAHO_DI_JAVA_OPTIONSenvironmentvariable#(JAVAMEMOPTIONSisthereforcompatibilityreasons)#******************************************************************if[-z"$JAVAMEMOPTIONS"];thenJAVAMEMOPTIONS="-Xmx512m"fiif[-z"$PENTAHO_DI_JAVA_OPTIONS"];thenPENTAHO_DI_JAVA_OPTIONS=$JAVAMEMOPTIONSfiOPT="$PENTAHO_DI_JAVA_OPTIONS-cp$CLASSPATH-Dorg.mortbay.util.URI.charset=UTF-8-Djava.library.path=$LIBPATH-DKETTLE_HOME=$KETTLE_HOME-DKETTLE_REPOSITORY=$KETTLE_REPOSITORY-DKETTLE_USER=$KETTLE_USER-DKETTLE_PASSWORD=$KETTLE_PASSWORD-DKETTLE_PLUGIN_PACKAGES=$KETTLE_PLUGIN_PACKAGES-DKETTLE_LOG_SIZE_LIMIT=$KETTLE_LOG_SIZE_LIMIT"#*********************************************************** #SetuptheoptionsforJAAS#******************************************************************if[!"x$JAAS_LOGIN_MODULE_CONFIG"="x"-a!"x$JAAS_LOGIN_MODULE_NAME"="x"];thenOPT=$OPT"-Djava.security.auth.login.config=$JAAS_LOGIN_MODULE_CONFIG"OPT=$OPT"-Dloginmodulename=$JAAS_LOGIN_MODULE_NAME"fi#***** #Run...#**********"$_PENTAHO_JAVA"$OPTorg.pentaho.di.www.Carte"${1+$@}" @<atarget="_blank"rel="nofollow">大梦想家 不知你问题解决没有  我觉得是没找到执行的shell,可以使用whichsh查看一下sh的具体路径 原来这样啊,活到老,学到老

爱吃鱼的程序员 2020-06-14 17:23:43 0 浏览量 回答数 0

回答

您不需要使用Java变量。要包含系统环境变量,请在application.properties文件中添加以下内容: spring.datasource.url = ${OPENSHIFT_MYSQL_DB_HOST}:${OPENSHIFT_MYSQL_DB_PORT}/"nameofDB" spring.datasource.username = ${OPENSHIFT_MYSQL_DB_USERNAME} spring.datasource.password = ${OPENSHIFT_MYSQL_DB_PASSWORD} 但是@Stefan Isele建议的方法更为可取,因为在这种情况下,您只需要声明一个env变量:spring.profiles.active。Spring将通过application-{profile-name}.properties模板自动读取适当的属性文件。来源:stack overflow

保持可爱mmm 2020-05-10 22:24:01 0 浏览量 回答数 0

问题

PHP重写的消息队列MQ类

gia114 2019-12-01 21:17:46 9428 浏览量 回答数 2

问题

关于Pentaho(Kettle)在AIX上启动报错的问题?报错

爱吃鱼的程序员 2020-06-09 13:20:18 0 浏览量 回答数 1

回答

Rephp程序上传多媒体文件接口代码 你好,一直提示【 string(47) "{"errcode":40035,"errmsg":"不合法的参数"}"】,请问这是什么问题,我的代码如下: require_once(__ROOT__."/Dkaifa/env.php");         $access_token=$this->access_token(CORPID,SECRET);                  $url = "https://oapi.dingtalk.com/media/upload?access_token=".$access_token."&type=image";                  $file['media'] = "@/wuye.sxxiangda.com/ma.jpg";   //这里的“/www/test.jpg”文件的绝对路径         $res = $this->http_post($url,$file);         if($res['errcode'] == 0){             dump($res);             //文件上传成功 $res['media_id'] 就是返回的 素材id         }else{             echo "上传失败";         }

不大 2019-12-02 01:29:45 0 浏览量 回答数 0

回答

如果是通过composer安装的Yii,可以通过如下方式引入<?php defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_ENV') or define('YII_ENV', 'dev'); // 注册 Composer 自动加载器 require(__DIR__ . '/../vendor/autoload.php'); // 包含 Yii 类文件 require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); // 加载应用配置 $config = require(__DIR__ . '/../config/web.php'); // 创建、配置、运行一个应用 (new yii\web\Application($config))->run();

昱冬 2019-12-01 23:48:01 0 浏览量 回答数 0

问题

f2实例OpenCL开发最佳实践

chenchuan 2019-12-01 21:36:27 527 浏览量 回答数 0

问题

ekho6.0加上--enable-festival报错请教??报错

爱吃鱼的程序员 2020-06-14 22:38:25 0 浏览量 回答数 1

问题

Linux下的man以及less等如此重要的看文档工具,如何添加丰富的高亮功能,以提高效率?

a123456678 2019-12-01 20:12:41 1097 浏览量 回答数 1

回答

Nginx是一个轻量级的,高性能的Web服务器以及反向代理和邮箱 (IMAP/POP3)代理服务器。它运行在UNIX,GNU /linux,BSD 各种版本,Mac OS X,Solaris和Windows。根据调查统计,6%的网站使用Nginx Web服务器。Nginx是少数能处理C10K问题的服务器之一。跟传统的服务器不同,Nginx不依赖线程来处理请求。相反,它使用了更多的可扩展的事 件驱动(异步)架构。Nginx为一些高流量的网站提供动力,比如WordPress,人人网,腾讯,网易等。这篇文章主要是介绍如何提高运行在 Linux或UNIX系统的Nginx Web服务器的安全性。 默认配置文件和Nginx端口 /usr/local/nginx/conf/ – Nginx配置文件目录,/usr/local/nginx/conf/nginx.conf是主配置文件 /usr/local/nginx/html/ – 默认网站文件位置 /usr/local/nginx/logs/ – 默认日志文件位置 Nginx HTTP默认端口 : TCP 80 Nginx HTTPS默认端口: TCP 443 你可以使用以下命令来测试Nginx配置文件准确性。 /usr/local/nginx/sbin/nginx -t 将会输出: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok configuration file /usr/local/nginx/conf/nginx.conf test is successful 执行以下命令来重新加载配置文件。 /usr/local/nginx/sbin/nginx -s reload 执行以下命令来停止服务器。 /usr/local/nginx/sbin/nginx -s stop 一、配置SELinux 注意:对于云服务器 ECS,参阅 ECS 使用须知 ,基于兼容性、稳定性考虑,请勿开启 SELinux。 安全增强型 Linux(SELinux)是一个Linux内核的功能,它提供支持访问控制的安全政策保护机制。它可以防御大部分攻击。下面我们来看如何启动基于centos/RHEL系统的SELinux。 安装SELinux rpm -qa | grep selinux libselinux-1.23.10-2 selinux-policy-targeted-1.23.16-6 如果没有返回任何结果,代表没有安装 SELinux,如果返回了类似上面的结果,则说明系统安装了 SELinux。 布什值锁定 运行命令getsebool -a来锁定系统。 getsebool -a | less getsebool -a | grep off getsebool -a | grep o 二、通过分区挂载允许最少特权 服务器上的网页/html/php文件单独分区。例如,新建一个分区/dev/sda5(第一逻辑分区),并且挂载在/nginx。确保 /nginx是以noexec, nodev and nosetuid的权限挂载。以下是我的/etc/fstab的挂载/nginx的信息: LABEL=/nginx /nginx ext3 defaults,nosuid,noexec,nodev 1 2 注意:你需要使用fdisk和mkfs.ext3命令创建一个新分区。 三、配置/etc/sysctl.conf强化Linux安全 你可以通过编辑/etc/sysctl.conf来控制和配置Linux内核、网络设置。 Avoid a smurf attack net.ipv4.icmp_echo_ignore_broadcasts = 1 Turn on protection for bad icmp error messages net.ipv4.icmp_ignore_bogus_error_responses = 1 Turn on syncookies for SYN flood attack protection net.ipv4.tcp_syncookies = 1 Turn on and log spoofed, source routed, and redirect packets net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.default.log_martians = 1 No source routed packets here net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 Turn on reverse path filtering net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 Make sure no one can alter the routing tables net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 Don’t act as a router net.ipv4.ip_forward = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 Turn on execshild kernel.exec-shield = 1 kernel.randomize_va_space = 1 Tuen IPv6 net.ipv6.conf.default.router_solicitations = 0 net.ipv6.conf.default.accept_ra_rtr_pref = 0 net.ipv6.conf.default.accept_ra_pinfo = 0 net.ipv6.conf.default.accept_ra_defrtr = 0 net.ipv6.conf.default.autoconf = 0 net.ipv6.conf.default.dad_transmits = 0 net.ipv6.conf.default.max_addresses = 1 Optimization for port usefor LBs Increase system file descriptor limit fs.file-max = 65535 Allow for more PIDs (to reduce rollover problems); may break some programs 32768 kernel.pid_max = 65536 Increase system IP port limits net.ipv4.ip_local_port_range = 2000 65000 Increase TCP max buffer size setable using setsockopt() net.ipv4.tcp_rmem = 4096 87380 8388608 net.ipv4.tcp_wmem = 4096 87380 8388608 Increase Linux auto tuning TCP buffer limits min, default, and max number of bytes to use set max to at least 4MB, or higher if you use very high BDP paths Tcp Windows etc net.core.rmem_max = 8388608 net.core.wmem_max = 8388608 net.core.netdev_max_backlog = 5000 net.ipv4.tcp_window_scaling = 1 四、删除所有不需要的Nginx模块 你需要直接通过编译Nginx源代码使模块数量最少化。通过限制只允许web服务器访问模块把风险降到最低。你可以只配置安装nginx你所需要的模块。例如,禁用SSL和autoindex模块你可以执行以下命令: ./configure –without-http_autoindex_module –without-http_ssi_module make make install 通过以下命令来查看当编译nginx服务器时哪个模块能开户或关闭: ./configure –help | less 禁用你用不到的nginx模块。 (可选项)更改nginx版本名称。 编辑文件/http/ngx_http_header_filter_module.c: vi +48 src/http/ngx_http_header_filter_module.c 找到行: static char ngx_http_server_string[] = “Server: nginx” CRLF; static char ngx_http_server_full_string[] = “Server: ” NGINX_VER CRLF; 按照以下行修改: static char ngx_http_server_string[] = “Server: Ninja Web Server” CRLF; static char ngx_http_server_full_string[] = “Server: Ninja Web Server” CRLF; 保存并关闭文件。现在你可以编辑服务器了。增加以下代码到nginx.conf文件来关闭nginx版本号的显示。 server_tokens off 五、使用mod_security(只适合后端Apache服务器) mod_security为Apache提供一个应用程序级的防火墙。为后端Apache Web服务器安装mod_security,这会阻止很多注入式攻击。 六、安装SELinux策略以强化Nginx Web服务器 默认的SELinux不会保护Nginx Web服务器,但是你可以安装和编译保护软件。 1、安装编译SELinux所需环境支持 yum -y install selinux-policy-targeted selinux-policy-devel 2、下载SELinux策略以强化Nginx Web服务器。 cd /opt wget ‘http://downloads.sourceforge.net/project/selinuxnginx/se-ngix_1_0_10.tar.gz?use_mirror=nchc’ 3、解压文件 tar -zxvf se-ngix_1_0_10.tar.gz 4、编译文件 cd se-ngix_1_0_10/nginx make 将会输出如下: Compiling targeted nginx module /usr/bin/checkmodule: loading policy configuration from tmp/nginx.tmp /usr/bin/checkmodule: policy configuration loaded /usr/bin/checkmodule: writing binary representation (version 6) to tmp/nginx.mod Creating targeted nginx.pp policy package rm tmp/nginx.mod.fc tmp/nginx.mod 5、安装生成的nginx.pp SELinux模块: /usr/sbin/semodule -i nginx.pp 七、基于Iptables防火墙的限制 下面的防火墙脚本阻止任何除了允许: 来自HTTP(TCP端口80)的请求 来自ICMP ping的请求 ntp(端口123)的请求输出 smtp(TCP端口25)的请求输出 #!/bin/bash IPT=”/sbin/iptables” IPS Get server public ip SERVER_IP=$(ifconfig eth0 | grep ‘inet addr:’ | awk -F’inet addr:’ ‘{ print $2}’ | awk ‘{ print $1}’) LB1_IP=”204.54.1.1″ LB2_IP=”204.54.1.2″ Do some smart logic so that we can use damm script on LB2 too OTHER_LB=”" SERVER_IP=”" [[ "$SERVER_IP" == "$LB1_IP" ]] && OTHER_LB=”$LB2_IP” || OTHER_LB=”$LB1_IP” [[ "$OTHER_LB" == "$LB2_IP" ]] && OPP_LB=”$LB1_IP” || OPP_LB=”$LB2_IP” IPs PUB_SSH_ONLY=”122.xx.yy.zz/29″ FILES BLOCKED_IP_TDB=/root/.fw/blocked.ip.txt SPOOFIP=”127.0.0.0/8 192.168.0.0/16 172.16.0.0/12 10.0.0.0/8 169.254.0.0/16 0.0.0.0/8 240.0.0.0/4 255.255.255.255/32 168.254.0.0/16 224.0.0.0/4 240.0.0.0/5 248.0.0.0/5 192.0.2.0/24″ BADIPS=$( [[ -f ${BLOCKED_IP_TDB} ]] && egrep -v “^#|^$” ${BLOCKED_IP_TDB}) Interfaces PUB_IF=”eth0″ # public interface LO_IF=”lo” # loopback VPN_IF=”eth1″ # vpn / private net start firewall echo “Setting LB1 $(hostname) Firewall…” DROP and close everything $IPT -P INPUT DROP $IPT -P OUTPUT DROP $IPT -P FORWARD DROP Unlimited lo access $IPT -A INPUT -i ${LO_IF} -j ACCEPT $IPT -A OUTPUT -o ${LO_IF} -j ACCEPT Unlimited vpn / pnet access $IPT -A INPUT -i ${VPN_IF} -j ACCEPT $IPT -A OUTPUT -o ${VPN_IF} -j ACCEPT Drop sync $IPT -A INPUT -i ${PUB_IF} -p tcp ! –syn -m state –state NEW -j DROP Drop Fragments $IPT -A INPUT -i ${PUB_IF} -f -j DROP $IPT -A INPUT -i ${PUB_IF} -p tcp –tcp-flags ALL FIN,URG,PSH -j DROP $IPT -A INPUT -i ${PUB_IF} -p tcp –tcp-flags ALL ALL -j DROP Drop NULL packets $IPT -A INPUT -i ${PUB_IF} -p tcp –tcp-flags ALL NONE -m limit –limit 5/m –limit-burst 7 -j LOG –log-prefix ” NULL Packets “ $IPT -A INPUT -i ${PUB_IF} -p tcp –tcp-flags ALL NONE -j DROP $IPT -A INPUT -i ${PUB_IF} -p tcp –tcp-flags SYN,RST SYN,RST -j DROP Drop XMAS $IPT -A INPUT -i ${PUB_IF} -p tcp –tcp-flags SYN,FIN SYN,FIN -m limit –limit 5/m –limit-burst 7 -j LOG –log-prefix ” XMAS Packets “ $IPT -A INPUT -i ${PUB_IF} -p tcp –tcp-flags SYN,FIN SYN,FIN -j DROP Drop FIN packet scans $IPT -A INPUT -i ${PUB_IF} -p tcp –tcp-flags FIN,ACK FIN -m limit –limit 5/m –limit-burst 7 -j LOG –log-prefix ” Fin Packets Scan “ $IPT -A INPUT -i ${PUB_IF} -p tcp –tcp-flags FIN,ACK FIN -j DROP $IPT -A INPUT -i ${PUB_IF} -p tcp –tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP Log and get rid of broadcast / multicast and invalid $IPT -A INPUT -i ${PUB_IF} -m pkttype –pkt-type broadcast -j LOG –log-prefix ” Broadcast “ $IPT -A INPUT -i ${PUB_IF} -m pkttype –pkt-type broadcast -j DROP $IPT -A INPUT -i ${PUB_IF} -m pkttype –pkt-type multicast -j LOG –log-prefix ” Multicast “ $IPT -A INPUT -i ${PUB_IF} -m pkttype –pkt-type multicast -j DROP $IPT -A INPUT -i ${PUB_IF} -m state –state INVALID -j LOG –log-prefix ” Invalid “ $IPT -A INPUT -i ${PUB_IF} -m state –state INVALID -j DROP Log and block spoofed ips $IPT -N spooflist for ipblock in $SPOOFIP do $IPT -A spooflist -i ${PUB_IF} -s $ipblock -j LOG –log-prefix ” SPOOF List Block “ $IPT -A spooflist -i ${PUB_IF} -s $ipblock -j DROP done $IPT -I INPUT -j spooflist $IPT -I OUTPUT -j spooflist $IPT -I FORWARD -j spooflist Allow ssh only from selected public ips for ip in ${PUB_SSH_ONLY} do $IPT -A INPUT -i ${PUB_IF} -s ${ip} -p tcp -d ${SERVER_IP} –destination-port 22 -j ACCEPT $IPT -A OUTPUT -o ${PUB_IF} -d ${ip} -p tcp -s ${SERVER_IP} –sport 22 -j ACCEPT done allow incoming ICMP ping pong stuff $IPT -A INPUT -i ${PUB_IF} -p icmp –icmp-type 8 -s 0/0 -m state –state NEW,ESTABLISHED,RELATED -m limit –limit 30/sec -j ACCEPT $IPT -A OUTPUT -o ${PUB_IF} -p icmp –icmp-type 0 -d 0/0 -m state –state ESTABLISHED,RELATED -j ACCEPT allow incoming HTTP port 80 $IPT -A INPUT -i ${PUB_IF} -p tcp -s 0/0 –sport 1024:65535 –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT $IPT -A OUTPUT -o ${PUB_IF} -p tcp –sport 80 -d 0/0 –dport 1024:65535 -m state –state ESTABLISHED -j ACCEPT allow outgoing ntp $IPT -A OUTPUT -o ${PUB_IF} -p udp –dport 123 -m state –state NEW,ESTABLISHED -j ACCEPT $IPT -A INPUT -i ${PUB_IF} -p udp –sport 123 -m state –state ESTABLISHED -j ACCEPT allow outgoing smtp $IPT -A OUTPUT -o ${PUB_IF} -p tcp –dport 25 -m state –state NEW,ESTABLISHED -j ACCEPT $IPT -A INPUT -i ${PUB_IF} -p tcp –sport 25 -m state –state ESTABLISHED -j ACCEPT add your other rules here ####################### drop and log everything else $IPT -A INPUT -m limit –limit 5/m –limit-burst 7 -j LOG –log-prefix ” DEFAULT DROP “ $IPT -A INPUT -j DROP exit 0 八、控制缓冲区溢出攻击 编辑nginx.conf,为所有客户端设置缓冲区的大小限制。 vi /usr/local/nginx/conf/nginx.conf 编辑和设置所有客户端缓冲区的大小限制如下: Start: Size Limits & Buffer Overflows client_body_buffer_size 1K; client_header_buffer_size 1k; client_max_body_size 1k; large_client_header_buffers 2 1k; END: Size Limits & Buffer Overflows 解释: 1、client_body_buffer_size 1k-(默认8k或16k)这个指令可以指定连接请求实体的缓冲区大小。如果连接请求超过缓存区指定的值,那么这些请求实体的整体或部分将尝试写入一个临时文件。 2、client_header_buffer_size 1k-指令指定客户端请求头部的缓冲区大小。绝大多数情况下一个请求头不会大于1k,不过如果有来自于wap客户端的较大的cookie它可能会大于 1k,Nginx将分配给它一个更大的缓冲区,这个值可以在large_client_header_buffers里面设置。 3、client_max_body_size 1k-指令指定允许客户端连接的最大请求实体大小,它出现在请求头部的Content-Length字段。 如果请求大于指定的值,客户端将收到一个”Request Entity Too Large” (413)错误。记住,浏览器并不知道怎样显示这个错误。 4、large_client_header_buffers-指定客户端一些比较大的请求头使用的缓冲区数量和大小。请求字段不能大于一个缓冲区大小,如果客户端发送一个比较大的头,nginx将返回”Request URI too large” (414) 同样,请求的头部最长字段不能大于一个缓冲区,否则服务器将返回”Bad request” (400)。缓冲区只在需求时分开。默认一个缓冲区大小为操作系统中分页文件大小,通常是4k或8k,如果一个连接请求最终将状态转换为keep- alive,它所占用的缓冲区将被释放。 你还需要控制超时来提高服务器性能并与客户端断开连接。按照如下编辑: Start: Timeouts client_body_timeout 10; client_header_timeout 10; keepalive_timeout 5 5; send_timeout 10; End: Timeouts 1、client_body_timeout 10;-指令指定读取请求实体的超时时间。这里的超时是指一个请求实体没有进入读取步骤,如果连接超过这个时间而客户端没有任何响应,Nginx将返回一个”Request time out” (408)错误。 2、client_header_timeout 10;-指令指定读取客户端请求头标题的超时时间。这里的超时是指一个请求头没有进入读取步骤,如果连接超过这个时间而客户端没有任何响应,Nginx将返回一个”Request time out” (408)错误。 3、keepalive_timeout 5 5; – 参数的第一个值指定了客户端与服务器长连接的超时时间,超过这个时间,服务器将关闭连接。参数的第二个值(可选)指定了应答头中Keep-Alive: timeout=time的time值,这个值可以使一些浏览器知道什么时候关闭连接,以便服务器不用重复关闭,如果不指定这个参数,nginx不会在应 答头中发送Keep-Alive信息。(但这并不是指怎样将一个连接“Keep-Alive”)参数的这两个值可以不相同。 4、send_timeout 10; 指令指定了发送给客户端应答后的超时时间,Timeout是指没有进入完整established状态,只完成了两次握手,如果超过这个时间客户端没有任何响应,nginx将关闭连接。 九、控制并发连接 你可以使用NginxHttpLimitZone模块来限制指定的会话或者一个IP地址的特殊情况下的并发连接。编辑nginx.conf: Directive describes the zone, in which the session states are stored i.e. store in slimits. 1m can handle 32000 sessions with 32 bytes/session, set to 5m x 32000 session limit_zone slimits $binary_remote_addr 5m; Control maximum number of simultaneous connections for one session i.e. restricts the amount of connections from a single ip address limit_conn slimits 5; 上面表示限制每个远程IP地址的客户端同时打开连接不能超过5个。 十、只允许我们的域名的访问 如果机器人只是随机扫描服务器的所有域名,那拒绝这个请求。你必须允许配置的虚拟域或反向代理请求。你不必使用IP地址来拒绝。 Only requests to our Host are allowed i.e. nixcraft.in, images.nixcraft.in and www.nixcraft.in if ($host !~ ^(nixcraft.in|www.nixcraft.in|images.nixcraft.in)$ ) { return 444; } 十一、限制可用的请求方法 GET和POST是互联网上最常用的方法。 Web服务器的方法被定义在RFC 2616。如果Web服务器不要求启用所有可用的方法,它们应该被禁用。下面的指令将过滤只允许GET,HEAD和POST方法: Only allow these request methods if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; } Do not accept DELETE, SEARCH and other methods 更多关于HTTP方法的介绍 GET方法是用来请求,如文件http://www.moqifei.com/index.php。 HEAD方法是一样的,除非该服务器的GET请求无法返回消息体。 POST方法可能涉及到很多东西,如储存或更新数据,或订购产品,或通过提交表单发送电子邮件。这通常是使用服务器端处理,如PHP,Perl和Python等脚本。如果你要上传的文件和在服务器处理数据,你必须使用这个方法。 十二、如何拒绝一些User-Agents? 你可以很容易地阻止User-Agents,如扫描器,机器人以及滥用你服务器的垃圾邮件发送者。 Block download agents if ($http_user_agent ~* LWP::Simple|BBBike|wget) { return 403; } 阻止Soso和有道的机器人: Block some robots if ($http_user_agent ~* Sosospider|YodaoBot) { return 403; } 十三、如何防止图片盗链 图片或HTML盗链的意思是有人直接用你网站的图片地址来显示在他的网站上。最终的结果,你需要支付额外的宽带费用。这通常是在论坛和博客。我强烈建议您封锁,并阻止盗链行为。 Stop deep linking or hot linking location /images/ { valid_referers none blocked www.example.com example.com; if ($invalid_referer) { return 403; } } 例如:重定向并显示指定图片 valid_referers blocked www.example.com example.com; if ($invalid_referer) { rewrite ^/images/uploads.*.(gif|jpg|jpeg|png)$ http://www.examples.com/banned.jpg last } 十四、目录限制 你可以对指定的目录设置访问权限。所有的网站目录应该一一的配置,只允许必须的目录访问权限。 通过IP地址限制访问 你可以通过IP地址来限制访问目录/admin/: location /docs/ { block one workstation deny 192.168.1.1; allow anyone in 192.168.1.0/24 allow 192.168.1.0/24; drop rest of the world deny all; } 通过密码保护目录 首先创建密码文件并增加“user”用户: mkdir /usr/local/nginx/conf/.htpasswd/ htpasswd -c /usr/local/nginx/conf/.htpasswd/passwd user 编辑nginx.conf,加入需要保护的目录: Password Protect /personal-images/ and /delta/ directories location ~ /(personal-images/.|delta/.) { auth_basic “Restricted”; auth_basic_user_file /usr/local/nginx/conf/.htpasswd/passwd; } 一旦密码文件已经生成,你也可以用以下的命令来增加允许访问的用户: htpasswd -s /usr/local/nginx/conf/.htpasswd/passwd userName 十五、Nginx SSL配置 HTTP是一个纯文本协议,它是开放的被动监测。你应该使用SSL来加密你的用户内容。 创建SSL证书 执行以下命令: cd /usr/local/nginx/conf openssl genrsa -des3 -out server.key 1024 openssl req -new -key server.key -out server.csr cp server.key server.key.org openssl rsa -in server.key.org -out server.key openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt 编辑nginx.conf并按如下来更新: server { server_name example.com; listen 443; ssl on; ssl_certificate /usr/local/nginx/conf/server.crt; ssl_certificate_key /usr/local/nginx/conf/server.key; access_log /usr/local/nginx/logs/ssl.access.log; error_log /usr/local/nginx/logs/ssl.error.log; } 重启nginx: /usr/local/nginx/sbin/nginx -s reload 十六、Nginx与PHP安全建议 PHP是流行的服务器端脚本语言之一。如下编辑/etc/php.ini文件: Disallow dangerous functions disable_functions = phpinfo, system, mail, exec Try to limit resources Maximum execution time of each script, in seconds max_execution_time = 30 Maximum amount of time each script may spend parsing request data max_input_time = 60 Maximum amount of memory a script may consume (8MB) memory_limit = 8M Maximum size of POST data that PHP will accept. post_max_size = 8M Whether to allow HTTP file uploads. file_uploads = Off Maximum allowed size for uploaded files. upload_max_filesize = 2M Do not expose PHP error messages to external users display_errors = Off Turn on safe mode safe_mode = On Only allow access to executables in isolated directory safe_mode_exec_dir = php-required-executables-path Limit external access to PHP environment safemode_allowed_env_vars = PHP Restrict PHP information leakage expose_php = Off Log all errors log_errors = On Do not register globals for input data register_globals = Off Minimize allowable PHP post size post_max_size = 1K Ensure PHP redirects appropriately cgi.force_redirect = 0 Disallow uploading unless necessary file_uploads = Off Enable SQL safe mode sql.safe_mode = On Avoid Opening remote files allow_url_fopen = Off 十七、如果可能让Nginx运行在一个chroot监狱 把nginx放在一个chroot监狱以减小潜在的非法进入其它目录。你可以使用传统的与nginx一起安装的chroot。如果可能,那使用FreeBSD jails,Xen,OpenVZ虚拟化的容器概念。 十八、在防火墙级限制每个IP的连接数 网络服务器必须监视连接和每秒连接限制。PF和Iptales都能够在进入你的nginx服务器之前阻止最终用户的访问。 Linux Iptables:限制每次Nginx连接数 下面的例子会阻止来自一个IP的60秒钟内超过15个连接端口80的连接数。 /sbin/iptables -A INPUT -p tcp –dport 80 -i eth0 -m state –state NEW -m recent –set /sbin/iptables -A INPUT -p tcp –dport 80 -i eth0 -m state –state NEW -m recent –update –seconds 60 –hitcount 15 -j DROP service iptables save 请根据你的具体情况来设置限制的连接数。 十九:配置操作系统保护Web服务器 像以上介绍的启动SELinux.正确设置/nginx文档根目录的权限。Nginx以用户nginx运行。但是根目录(/nginx或者/usr /local/nginx/html)不应该设置属于用户nginx或对用户nginx可写。找出错误权限的文件可以使用如下命令: find /nginx -user nginx find /usr/local/nginx/html -user nginx 确保你更所有权为root或其它用户,一个典型的权限设置 /usr/local/nginx/html/ ls -l /usr/local/nginx/html/ 示例输出: -rw-r–r– 1 root root 925 Jan 3 00:50 error4xx.html -rw-r–r– 1 root root 52 Jan 3 10:00 error5xx.html -rw-r–r– 1 root root 134 Jan 3 00:52 index.html 你必须删除由vi或其它文本编辑器创建的备份文件: find /nginx -name ‘.?’ -not -name .ht -or -name ‘~’ -or -name ‘.bak’ -or -name ‘.old*’ find /usr/local/nginx/html/ -name ‘.?’ -not -name .ht -or -name ‘~’ -or -name ‘.bak’ -or -name ‘.old*’ 通过find命令的-delete选项来删除这些文件。 二十、限制Nginx连接传出 黑客会使用工具如wget下载你服务器本地的文件。使用Iptables从nginx用户来阻止传出连接。ipt_owner模块试图匹配本地产生的数据包的创建者。下面的例子中只允许user用户在外面使用80连接。 /sbin/iptables -A OUTPUT -o eth0 -m owner –uid-owner vivek -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT 通过以上的配置,你的nginx服务器已经非常安全了并可以发布网页。可是,你还应该根据你网站程序查找更多的安全设置资料。例如,wordpress或者第三方程序。

KB小秘书 2019-12-02 02:06:56 0 浏览量 回答数 0

问题

对于pod-to-pod通信,应该使用什么IP?服务的ClusterIP或端点

k8s小能手 2019-12-01 19:29:44 1269 浏览量 回答数 2

问题

tomcat 添加系统服务,出现env: /etc/init.d/tomcat:?报错

爱吃鱼的程序员 2020-06-12 15:25:18 0 浏览量 回答数 1

回答

#!/usr/bin/env bash break_size=$2 process(){ while read l do if [[ "$(($l%$break_size))" != "0" ]]; then echo -n $l, else echo $l fi done } process <$1 <div> </div> 保存为a.sh 然后执行./a.sh a.txt 50

a123456678 2019-12-02 02:49:11 0 浏览量 回答数 0

问题

shell脚本远程登录并启动程序报错:没有那个文件或目录?报错

爱吃鱼的程序员 2020-06-14 15:02:25 0 浏览量 回答数 1

问题

在 echo $JAVA_HOME /home/pipi/ENV/jdk

茶什i 2019-12-01 21:52:30 31 浏览量 回答数 2

问题

PowerShell怎样处理文件名转义字符?? 400 报错

爱吃鱼的程序员 2020-06-01 10:46:42 0 浏览量 回答数 1

问题

虚拟主机、轻云服务器常见问题FAQ(持续更新)

dengcf 2019-12-01 21:32:12 10635 浏览量 回答数 12

问题

如何在Shell脚本中访问jenkins groovy变量的值以进行循环

祖安文状元 2020-01-08 15:31:28 3 浏览量 回答数 1
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 企业建站模板