MCC(移动国家码)和 MNC(移动网络码)

MCC:Mobile Country Code,移动国家码,MCC的资源由国际电联(ITU)统一分配和管理,唯一识别移动用户所属的国家,共3位,中国为460;

MCC常用值

代码(MCC)ISO 3166-1国家
202GR希腊
204NL荷兰
206BE比利时
208FR法国
212MC摩纳哥
213AD安道尔
214ES西班牙
216匈牙利
218BA波斯尼亚和黑塞哥维那
219HR克罗地亚
220RS塞尔维亚 (共和国)
222IT意大利
225VA梵蒂冈城国
226RO罗马尼亚
228CH瑞士
230CZ捷克共和国
231SK斯洛伐克
232AT奥地利
234GB联合王国
235GB联合王国
238DK丹麦
240SE瑞典
242NO挪威
244FI芬兰
246LT立陶宛
247LV拉脱维亚
248EE爱沙尼亚
250RU俄罗斯联邦
255UA乌克兰
257BY白俄罗斯
259MD摩尔多瓦
260PL波兰
262DE德国
266GI直布罗陀 ( 英国 )
268PT葡萄牙
270LU卢森堡
272IE爱尔兰
274IS冰岛
276AL阿尔巴尼亚
278MT马耳他
280CY塞浦路斯
282通用电器格鲁吉亚
283调幅亚美尼亚
284BG保加利亚
286TR土耳其
288FO法罗群岛 ( 丹麦 )
290GL格陵兰 ( 丹麦 )
292SM圣马力诺
293SI斯洛文尼亚
294MK马其顿共和国
295列支敦士登
297ME黑山 (共和国)
302CA加拿大
308PM圣皮埃尔和密克隆群岛 ( 法国 )
310美国美国
311美国美国
312美国美国
313美国美国
314美国美国
315美国美国
316美国美国
330PR波多黎各 ( 美国 )
332VI美属维尔京群岛 ( 美国 )
334MX墨西哥
338JM牙买加
340GP瓜德罗普岛 ( 法国 )
340MQ马提尼克岛 ( 法国 )
342BB巴巴多斯
344AG安提瓜和巴布达
346KY开曼群岛 ( 英国 )
348VG英属维尔京群岛 ( 英国 )
350BM百慕达 ( 英国 )
352GD格林纳达
354MS蒙特塞拉特 ( 英国 )
356KN圣基茨和尼维斯
358LC圣卢西亚
360VC圣文森特和格林纳丁斯
362CW库拉索岛 ( 荷兰 )
363AW阿鲁巴 ( 荷兰 )
364BS巴哈马
365AI安圭拉
366DM多米尼加
368CU古巴
370DO多米尼加共和国
372HT海地
374TT特里尼达和多巴哥
376TC特克斯和凯科斯群岛 ( 英国 )
400AZ阿塞拜疆共和国
401KZ哈萨克斯坦
402BT不丹
404IN印度
405IN印度
406IN印度
410PK巴基斯坦
412AF阿富汗
413LK斯里兰卡
414MM缅甸
415LB黎巴嫩
416JO约旦
417SY叙利亚
418IQ伊拉克
419KW科威特
420SA沙特阿拉伯
421YE也门
422OM阿曼
424AE阿拉伯联合大公国
425IL以色列
425PS巴勒斯坦
426BH巴林
427QA卡塔尔
428MN蒙古
429NP尼泊尔
430AE阿拉伯联合大公国
431AE阿拉伯联合大公国
432IR伊朗
434UZ乌兹别克斯坦
436TJ塔吉克斯坦
437KG吉尔吉斯共和国
438TM土库曼斯坦
440JP日本
441JP日本
450KR韩国,南非,
452VN越南
454HK香港 ( 中国 )
455MO澳门 ( 中国 )
456KH柬埔寨
457LA老挝
460CN中国
461CN中国
466TW台湾
467KP韩国,北
470BD孟加拉国
472MV马尔代夫
502MY马来西亚
505AU澳大利亚
510ID印尼
514TL东帝汶
515PH菲律宾
520TH泰国
525SG新加坡
528BN文莱
530NZ新西兰
534MP北马里亚纳群岛 ( 美国 )
535GU关岛 ( 美国 )
536NR瑙鲁
537PG巴布亚新几内亚
539TO汤加
540SB索罗门群岛
541VU瓦努阿图
542FJ
543WF瓦利斯群岛和富图纳群岛 ( 法国 )
544AS美属萨摩亚 ( 美国 )
545KI基里巴斯
546NC新喀里多尼亚 ( 法国 )
547PF法属波利尼西亚 ( 法国 )
548CK库克群岛 ( 新西兰 )
549WS萨摩亚
550调频密克罗尼西亚联邦
551MH马绍尔群岛
552PW帕劳
555NU纽埃
602EG埃及
603DZ阿尔及利亚
604MA摩洛哥
605TN突尼斯
606LY利比亚
607GM冈比亚
608SN塞内加尔
609MR毛里塔尼亚
610ML马里
611GN几内亚
612CI科特迪瓦
613BF布基纳法索
614NE尼日尔
615TG多哥共和国
616BJ贝宁
617MU毛里求斯
618LR利比里亚
619SL塞拉利昂
620GH加纳
621NG尼日利亚
622TD乍得
623CF中非共和国
624CM喀麦隆
625CV佛得角
626ST圣多美及普林西比
627GQ赤道几内亚
628GA加蓬共和国
629CG刚果民主共和国
630光盘刚果民主共和国
631AO安哥拉
632GW几内亚比绍
633SC塞舌尔
634SD苏丹
635RW卢旺达共和国
636ET埃塞俄比亚
637SO索马里
638DJ吉布提
639KE肯尼亚
640TZ坦桑尼亚
641UG乌干达
642BI布隆迪
643MZ莫桑比克
645ZM赞比亚
646MG马达加斯加
647可再生能源留尼汪 ( 法国 )
648ZW津巴布韦
649NA纳米比亚
650MW马拉维
651LS莱索托
652BW博茨瓦纳
653SZ斯威士兰
654KM科摩罗
655ZA南非
657ER厄立特里亚
702BZ伯利兹
704GT危地马拉
706SV萨尔瓦多
708HN洪都拉斯
710NI尼加拉瓜
712CR哥斯达黎加
714PA巴拿马
716PE秘鲁
722AR阿根廷共和国
724BR巴西
730CL智利
732CO哥伦比亚
734VE委内瑞拉
736BO玻利维亚
738GY圭亚那
740EC厄瓜多尔
742GF法属圭亚那 ( 法国 )
744PY巴拉圭
746SR苏里南
748UY乌拉圭
750FK福克兰群岛 (英国)

MNC常用值

00中国移动
01中国联通
02中国移动
03中国电信
04中国移动
06中国联通
07中国移动
08中国移动
09中国联通
10中国联通
11中国电信
12中国电信
13中国移动

mac安装redis

首先查看是否安装了homebrew

brew --version

如果此命令失败,那么先去安装homebrew吧。

安装

从终端运行来安装redis:

brew install redis

在前台启动和停止 Redis

从命令行运行以下命令来测试是否成功安装了redis:

redis-server

如果成功,将看到 Redis 的启动日志,并且 Redis 将在前台运行。

输入Ctrl-C停止redis

使用 launchd 启动和停止 Redis

作为在前台运行 Redis 的替代方案,还可以使用launchd在后台启动进程:

brew services start redis

这将启动 Redis 并在登录时重新启动它。可以launchd通过运行以下命令检查托管 Redis 的状态:

brew services info redis

如果服务正在运行,将看到如下输出:

redis (homebrew.mxcl.redis)
Running: ✔
Loaded: ✔
User: yourname
PID: 67836

要停止服务,请运行:

brew services stop redis

连接到 Redis

Redis 运行后,可以运行以下命令对其进行测试redis-cli

redis-cli

这将打开 Redis REPL。尝试运行一些命令:

127.0.0.1:6379> lpush demos redis-macOS-demo
OK
127.0.0.1:6379> rpop demos
"redis-macOS-demo"

Android Studio 模拟器无法联网

本来as的模拟器用着好好得,突然有一次build之后就无法上网了。 不仅自己的app,连默认浏览器都不行。 下面是三种方法

1: 我就是遇到的这种问题,因为配了android studio的代理导致模拟器不能联网:

解决方案:在模拟器中选择设置(…)->代理(Proxy)->选择No proxy把代理取消掉就可以了。

2: 另外看到有说修改网络设置,将ipv6改成local的,这个我有试过但是没效果,如下图:

3: 还有说法是修改本地dns为8.8.8.8或者其他稳定ip的。这个感觉和模拟器已经没关系了,如果有问题自己的实体机应该也会不稳定。

mac查看硬盘使用情况

mac有很多方法查看硬盘使用情况

  1. 使用自带的硬盘检测工具 disk Utility
  2. 使用自带的shell命令
    1. du -sh . | sort -rn | head -n 10
  3. 使用一个形象可视化的shell命令ncdu(推荐)
    1. 安装:在命令行中输入:brew install ncdu
    2. 使用:在命令行中输入:ncdu+空格+路径
      1. 举例,查看当前路径硬盘使用情况,就是(ncdu+空格+点): ncdu .
      2. 举例,查看所有硬盘使用情况,就是(ncdu+空格+”/”): ncdu /

快捷键如下所示:

? — 使用帮助
up, k — 向上移动光标
down, j – 向下移动光标
right/enter — 打开选定的目录
left, <, h — 打开父目录
n — 按文件名排序(升序/降序)
s — 按文件大小排序(升序/降序)
C – 按项目数排序(升序/降序)
d – 删除选定的文件或目录
t — 排序时将目录放在文件前面
g – 以图形方式显示百分比

如果发现硬盘占用不多,但是总会提示可用空间不足, 或者在硬盘工具disk Utility中显示没有空间,可以参考这篇文章:如何处理mac空间不足的问题

mac空间不足

先说结果:是由于时间机器(time machine)的自动备份造成的。

在Mac的「关于本机」中显示我的电脑还有90多G的可用空间,但是使用硬盘工具(disk Utility)时发现空间都被Macintosh – Data占用了。

用了各种工具shell命令一起用,发现根本解决不了问题,期间还发现了mac firmlink的骚操作。

使用硬盘工具,显示如下信息:

「可用100.41GB(73.22GB可清除)」

这就引起了我的注意,因为如果这73.22GB清除掉,就是我正常可用的空间了,也和「关于本机」中的数据相符。

具体方法为:

在「系统偏好设置」中,找到「时间机器」,将「自动备份」取消勾选。

  1. 启动「终端」,输入以下命令

sudo tmutil listlocalsnapshots /
输入完成后,会要求你输入管理员密码,输入后回车。

  1. 这时候就会出现一堆写着Time Machine的字符出现。
  1. 输入

tmutil deletelocalsnapshots XXXX-XX-XX-XXXXXX
这里的「XXXX-XX-XX-XXXXXX」是Time Machine后面的那串数字,如 2021-08-19-103846。

  1. 等待一会,出现「Deleted local snapshot」后代表删除成功。

操作结束后,回到「磁盘工具」可以发现可用空间变多了

但是仍然显示有73.22GB可清除。此时只需重启电脑。

PHP使用curl

php封装好的5种不同方式的curl请求函数

<?php
//get请求
function geturl($url){
        $headerArray =array("Content-type:application/json;","Accept:application/json");
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);
        $output = curl_exec($ch);
        curl_close($ch);
        $output = json_decode($output,true);
        return $output;
}

//post请求
function posturl($url,$data){
        $data  = json_encode($data);    
        $headerArray =array("Content-type:application/json;charset='utf-8'","Accept:application/json");
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArray);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return json_decode($output,true);
}


//put请求
function puturl($url,$data){
    $data = json_encode($data);
    $ch = curl_init(); //初始化CURL句柄 
    curl_setopt($ch, CURLOPT_URL, $url); //设置请求的URL
    curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //设为TRUE把curl_exec()结果转化为字串,而不是直接输出 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST,"PUT"); //设置请求方式
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//设置提交的字符串
    $output = curl_exec($ch);
    curl_close($ch);
    return json_decode($output,true);
}

//del请求
function delurl($url,$data){
    $data  = json_encode($data);
    $ch = curl_init();
    curl_setopt ($ch,CURLOPT_URL,$put_url);
    curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "DELETE");   
    curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
    $output = curl_exec($ch);
    curl_close($ch);
    $output = json_decode($output,true);
}

//patch请求
function patchurl($url,$data){
    $data  = json_encode($data);
    $ch = curl_init();
    curl_setopt ($ch,CURLOPT_URL,$url);
    curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "PATCH");  
    curl_setopt($ch, CURLOPT_POSTFIELDS,$data);     
    $output = curl_exec($ch);
    curl_close($ch);
    $output = json_decode($output);
    return $output;
}
?>

CentOS7 手动部署lnmp环境

步骤一:准备编译环境

  1. 关闭防火墙。
    1. 运行systemctl status firewalld命令,查看当前防火墙的状态。查看防火墙状态
      • 如果防火墙的状态参数是inactive,则防火墙为关闭状态。
      • 如果防火墙的状态参数是active,则防火墙为开启状态。
    2. 关闭防火墙。如果防火墙为关闭状态可以忽略此步骤。
      • 如果您想临时关闭防火墙,需要运行以下命令:systemctl stop firewalld说明 临时关闭防火墙后,如果Linux实例重启,则防火墙将会自动开启。
      • 如果您想永久关闭防火墙,需要依次运行以下命令:
        1. 关闭防火墙。systemctl stop firewalld
        2. 实例开机时,禁止启动防火墙服务。systemctl disable firewalld
  2. 关闭SELinux。
    1. 运行getenforce命令查看SELinux的当前状态。
      • 如果SELinux状态参数是Disabled,则SELinux为关闭状态。
      • 如果SELinux状态参数是Enforcing,则SELinux为开启状态。
    2. 关闭SELinux。如果SELinux为关闭状态可以忽略此步骤。

步骤二:安装Nginx

  1. 运行以下命令安装Nginx。yum -y install nginx
  2. 运行以下命令查看Nginx版本。nginx -v返回结果如下所示,表示Nginx安装成功。nginx version: nginx/1.20.1

步骤三:安装MySQL

  1. 运行以下命令更新YUM源。rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
  2. 运行以下命令安装MySQL。说明 如果您使用的操作系统内核版本为el8,可能会提示报错信息No match for argument。您需要先运行命令yum module disable mysql禁用默认的MySQL模块,再安装MySQL。yum -y install mysql-community-server
  3. 运行以下命令查看MySQL版本号。mysql -V返回结果如下所示,表示MySQL安装成功。mysql Ver 14.14 Distrib 5.7.36, for Linux (x86_64) using EditLine wrapper
  4. 运行以下命令启动MySQL。systemctl start mysqld
  5. 依次运行以下命令设置开机启动MySQL。systemctl enable mysqldsystemctl daemon-reload

步骤四:安装PHP

  1. 更新YUM源。
    1. 运行以下命令添加epel源。yum install \https://repo.ius.io/ius-release-el7.rpm \https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    2. 运行以下命令添加Webtatic源。rpm -ivh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
  2. 运行以下命令安装PHP。yum -y install php71w-devel php71w.x86_64 php71w-cli.x86_64 php71w-common.x86_64 php71w-gd.x86_64 php71w-ldap.x86_64 php71w-mbstring.x86_64 php71w-mcrypt.x86_64 php71w-pdo.x86_64 php71w-mysqlnd php71w-fpm php71w-opcache php71w-pecl-redis php71w-pecl-mongodb
  3. 运行以下命令查看PHP版本。php -v返回结果如下所示,表示安装成功。PHP 7.0.33 (cli) (built: Dec 6 2018 22:30:44) ( NTS )Copyright (c) 1997-2017 The PHP GroupZend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies with Zend OPcache v7.0.33, Copyright (c) 1999-2017, by Zend Technologies

步骤五:配置Nginx

  1. 运行以下命令备份Nginx配置文件。cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
  2. 修改Nginx配置文件,添加Nginx对PHP的支持。说明 若不添加此配置信息,后续您使用浏览器访问PHP页面时,页面将无法显示。
    1. 运行以下命令打开Nginx配置文件。vim /etc/nginx/nginx.conf
    2. 按i进入编辑模式。
    3. server大括号内,修改或添加下列配置信息。除下面提及的需要添加或修改的配置信息外,其他配置保持默认值即可。
      • 添加或修改location /配置信息。 location / { index index.php index.html index.htm; }
      • 添加或修改location ~ .php$配置信息。 #添加下列信息,配置Nginx通过fastcgi方式处理您的PHP请求。 location ~ .php$ { root /usr/share/nginx/html; #将/usr/share/nginx/html替换为您的网站根目录,本文使用/usr/share/nginx/html作为网站根目录。 fastcgi_pass 127.0.0.1:9000; #Nginx通过本机的9000端口将PHP请求转发给PHP-FPM进行处理。 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; #Nginx调用fastcgi接口处理PHP请求。 }
      添加或修改配置信息后,文件内容如下图所示:nginx配置文件
    4. 按下Esc键后,输入:wq并回车以保存关闭配置文件。
  3. 运行以下命令启动Nginx服务。systemctl start nginx
  4. 运行以下命令设置Nginx服务开机自启动。systemctl enable nginx

步骤六:配置MySQL

  1. 运行以下命令查看/var/log/mysqld.log文件,获取并记录root用户的初始密码。grep 'temporary password' /var/log/mysqld.log命令行返回结果如下,其中ARQTRy3+n8*W为MySQL的初始密码。在下一步重置root用户密码时,会使用该初始密码。2021-11-10T07:01:26.595215Z 1 [Note] A temporary password is generated for root@localhost: ARQTRy3+n8*W
  2. 运行以下命令配置MySQL的安全性。mysql_secure_installation
    1. 输入MySQL的初始密码。说明 在输入密码时,系统为了最大限度的保证数据安全,命令行将不做任何回显。您只需要输入正确的密码信息,然后按Enter键即可。Securing the MySQL server deployment. Enter password for user root: #输入上一步获取的root用户初始密码
    2. 为MySQL设置新密码。The existing password for the user account root has expired. Please set a new password. New password: #输入新密码。长度为8至30个字符,必须同时包含大小写英文字母、数字和特殊符号。特殊符号包含()` ~!@#$%^&*-+=|{}[]:;‘<>,.?/ Re-enter new password: #确认新密码。The 'validate_password' plugin is installed on the server.The subsequent steps will run with the existing configurationof the plugin.Using existing password for root. Estimated strength of the password: 100 #返回结果包含您设置的密码强度。Change the password for root ? ((Press y|Y for Yes, any other key for No) :Y #您需要输入Y以确认使用新密码。 #新密码设置完成后,需要再次验证新密码。New password:#再次输入新密码。 Re-enter new password:#再次确认新密码。 Estimated strength of the password: 100Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :Y #您需要输入Y,再次确认使用新密码。
    3. 输入Y删除匿名用户。Remove anonymous users? (Press y|Y for Yes, any other key for No) :YSuccess.
    4. 输入Y禁止使用root用户远程登录MySQL。Disallow root login remotely? (Press y|Y for Yes, any other key for No) :YSuccess.
    5. 输入Y删除test库以及用户对test库的访问权限。Remove test database and access to it? (Press y|Y for Yes, any other key for No) :Y - Dropping test database...Success. - Removing privileges on test database...Success.
    6. 输入Y重新加载授权表。Reload privilege tables now? (Press y|Y for Yes, any other key for No) :YSuccess. All done!

步骤七:配置PHP

  1. 新建并编辑phpinfo.php文件,用于展示PHP信息。
    1. 运行以下命令新建phpinfo.php文件。vim <网站根目录>/phpinfo.php<网站根目录>是您在nginx.conf配置文件中location ~ .php$大括号内,配置的root参数值,如下图所示。网站根目录本文配置的网站根目录为/usr/share/nginx/html,因此需要运行以下命令新建phpinfo.php文件:vim /usr/share/nginx/html/phpinfo.php
    2. 按i进入编辑模式。
    3. 输入下列内容,函数phpinfo()​会展示PHP的所有配置信息。<?php echo phpinfo(); ?>
    4. 按Esc键后,输入:wq并回车,保存关闭配置文件。
  2. 运行以下命令启动PHP-FPM。systemctl start php-fpm
  3. 运行以下命令设置PHP-FPM开机自启动。systemctl enable php-fpm

步骤八:测试访问LNMP配置信息页面

  1. 在本地Windows主机或其他具有公网访问能力的Windows主机中,打开浏览器。
  2. 在浏览器的地址栏输入http://<ECS实例公网IP地址>/phpinfo.php进行访问。访问结果如下图所示,表示LNMP环境部署成功。php结果

后续步骤

测试访问LNMP配置信息页面后,建议您运行以下命令将phpinfo.php文件删除,消除数据泄露风险。

rm -rf <网站根目录>/phpinfo.php

其中,<网站根目录>需要替换为您在nginx.conf中配置的网站根目录。本文配置的网站根目录为/usr/share/nginx/html,因此需要运行以下命令:

rm -rf /usr/share/nginx/html/phpinfo.php

常见问题

如何使用其他版本的Nginx服务器?

  1. 使用浏览器访问Nginx开源社区获取对应的Nginx版本的下载链接。请根据您的个人需求,选择对应的Nginx版本。本章节以Nginx 1.8.1为例。
  2. 远程连接需要部署LNMP环境的ECS实例。
  3. 运行wget命令下载Nginx 1.8.1。您可以通过Nginx开源社区直接获取对应版本的安装包URL,然后通过wget URL的方式将Nginx安装包下载至ECS实例。例如,Nginx 1.8.1的下载命令如下:wget http://nginx.org/download/nginx-1.8.1.tar.gz
  4. 运行以下命令,安装Nginx相关依赖。yum install -y gcc-c++yum install -y pcre pcre-develyum install -y zlib zlib-develyum install -y openssl openssl-devel
  5. 运行以下命令,解压Nginx 1.8.1安装包,然后进入Nginx所在的文件夹。tar zxvf nginx-1.8.1.tar.gzcd nginx-1.8.1
  6. 依次运行以下命令,编译源码。./configure \ --user=nobody \ --group=nobody \ --prefix=/usr/local/nginx \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-http_realip_module \ --with-http_sub_module \ --with-http_ssl_modulemake && make install
  7. 运行以下命令,进入Nginx的sbin目录,然后启动Nginx。cd /usr/local/nginx/sbin/./nginx
  8. 在本地主机中,使用浏览器访问ECS实例公网IP。出现如下图所示的页面,表示Nginx已成功安装并启动。nginx

pip换源

  1. 临时使用:

在使用pip的时候加参数-i

例如:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gevent

常用的pip源如下:

pypi 清华大学源:https://pypi.tuna.tsinghua.edu.cn/simple
pypi 豆瓣源 :http://pypi.douban.com/simple/
pypi 腾讯源:http://mirrors.cloud.tencent.com/pypi/simple
pypi 阿里源:https://mirrors.aliyun.com/pypi/

  1. 永久修改:

linux下 :

mkdir ~/.pip
vi ~/.pip/pip.conf

添加内容如下:

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

windows下,直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,新建文件pip.ini,内容如下

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

工具网站整理

  1. GPT合集网站:CHATGPT合集
  2. 随机邮箱:生成一个随机邮箱,当你要使用临时邮箱接收验证码的时候可以使用。
  3. 二维码生成器
  4. 句子(单词)翻译
    1. 免费:有道谷歌
    2. 限量免费:腾讯
    3. audio translate free:有道
  5. 单词解释
    1. 免费:有道非官方的有道详细见文章
  6. 电子书
    1. 免费英文电子书:https://www.gutenberg.org/
  7. 自媒体
    1. 视频下载:youtube等视频下载1
  8. 反编译神器:顺藤摸瓜
  9. 生成像素头像:网站1
  10. 接口大全:该网站列举了几百个可以使用的api接口,包含了生活工作中的各个方面,如查询天气、车辆、单词等等。
  11. 多空间浏览器: iOS版下载地址 Android版下载地址

有道翻译有官方接口-非官方

有道官方接口

官方接口:https://openapi.youdao.com/openapi

可查询英语单词注释、单词发音、网络释义(不一定存在),可获取在线发音地址。

具体使用,可参考 C# 有道API翻译 查询单词详细信息

有道非官方接口

何谓非官方接口,即不对外发布、小范围使用的接口。这种一般人都不知道的接口,官方不能保证数据的准确性

API接口:http://dict.youdao.com/jsonapi

拼接参数:

  • jsonversion:json 版本,目前已知取值12,返回结果大同小异。本文档采用2
  • client:客户端类型,取值mobile
  • q:查询的单词
  • dicts:需要查询哪些字典。目前已知 {"count":99,"dicts":[["ec","ce","newcj","newjc","kc","ck","fc","cf","multle","jtj","pic_dict","tc","ct","typos","special","tcb","baike","lang","simple","wordform","exam_dict","ctc","web_search","auth_sents_part","ec21","phrs","input","wikipedia_digest","ee","collins","ugc","media_sents_part","syno","rel_word","longman","ce_new","le","newcj_sents","blng_sents_part","hh"],["ugc"],["longman"],["newjc"],["newcj"],["web_trans"],["fanyi"]]}。可为空,为空则返回全部字段
  • keyfrom:mdict. + 版本号 + .手机平台。可为空
  • model:手机型号。可为空
  • mid:平台版本。可为空
  • imei:未知。可为空
  • vendor:应用下载平台。可为空
  • screen:屏幕宽高。可为空
  • ssid:用户名。可为空
  • network:网络状态,取值 wifi4G5G 等
  • abtest:ab测试。可为空
  • xmlVersion:默认使用5.1

案例:查询account单词

http://dict.youdao.com/jsonapi?jsonversion=2&client=mobile&q=account&dicts=%7B%22count%22%3A99%2C%22dicts%22%3A%5B%5B%22ec%22%2C%22ce%22%2C%22newcj%22%2C%22newjc%22%2C%22kc%22%2C%22ck%22%2C%22fc%22%2C%22cf%22%2C%22multle%22%2C%22jtj%22%2C%22pic_dict%22%2C%22tc%22%2C%22ct%22%2C%22typos%22%2C%22special%22%2C%22tcb%22%2C%22baike%22%2C%22lang%22%2C%22simple%22%2C%22wordform%22%2C%22exam_dict%22%2C%22ctc%22%2C%22web_search%22%2C%22auth_sents_part%22%2C%22ec21%22%2C%22phrs%22%2C%22input%22%2C%22wikipedia_digest%22%2C%22ee%22%2C%22collins%22%2C%22ugc%22%2C%22media_sents_part%22%2C%22syno%22%2C%22rel_word%22%2C%22longman%22%2C%22ce_new%22%2C%22le%22%2C%22newcj_sents%22%2C%22blng_sents_part%22%2C%22hh%22%5D%2C%5B%22ugc%22%5D%2C%5B%22longman%22%5D%2C%5B%22newjc%22%5D%2C%5B%22newcj%22%5D%2C%5B%22web_trans%22%5D%2C%5B%22fanyi%22%5D%5D%7D&keyfrom=mdict.7.2.0.android&model=honor&mid=5.6.1&imei=659135764921685&vendor=wandoujia&screen=1080x1800&ssid=superman&network=wifi&abtest=2&xmlVersion=5.1 

详细数据:

 以上节点中,代表的是字典关键字。我们来分析下其中关键的字典数据:

  • collins — 柯林斯英汉双解大辞典
  • ec — 英汉翻译字典(英汉释义)
  • ee — 英英翻译字典(英英释义
  • exam_dict — 考试专用字典(词汇词根+联想记忆法)
  • longman — 朗文当代高级英语辞典
  • phrs — 词组短语,如account单词对应的“current account”
  • rel_word — 同根词,如account单词对应的形容词“accountable”
  • syno — 近义词,单词每种释义对应的近义词列表
  • web_trans — 网络释义

 英语单词查询Demo

源代码请见Github: https://github.com/Kybs0/SearchWordByYoudao

Demo效果如下截图:

关键字:英语单词详细信息查询、有道API详细接口

vim查找与替换

 VIM中常用的替换模式总结。

1,简单替换表达式

替换命令可以在全文中用一个单词替换另一个单词:

:%s/four/4/g

“%” 范围前缀表示在所有行中执行替换。最后的 “g” 标记表示替换行中的所有匹配点。如果仅仅对当前行进行操作,那么只要去掉%即可

  如果你有一个象 “thirtyfour” 这样的单词,上面的命令会出错。这种情况下,这个单词会被替换成”thirty4″。要解决这个问题,用 “\<” 来指定匹配单词开头:

       :%s/\<four/4/g

显然,这样在处理 “fourty” 的时候还是会出错。用 “\>” 来解决这个问题:

       :%s/\<four\>/4/g

如果你在编码,你可能只想替换注释中的 “four”,而保留代码中的。由于这很难指定,可以在替换命令中加一个 “c” 标记,这样,Vim 会在每次替换前提示你:

       :%s/\<four\>/4/gc

2,删除多余的空格

要删除这些每行后面多余的空格,可以执行如下命令:

       :%s/\s\+$//

命令前面指明范围是 “%”,所以这会作用于整个文件。”substitute” 命令的匹配模式是

“\s\+$”。这表示行末($)前的一个或者多个(\+)空格(\s)。替换命令的 “to” 部分是空的:”//”。这样就会删除那些匹配的空白字符。

3,匹配重复性模式

星号项 “*” 规定在它前面的项可以重复任意次。因此:

       /a*

匹 配 “a”,”aa”,”aaa”,等等。但也匹配 “” (空字串),因为零次也包含在内。星号 “*” 仅仅应用于那个紧邻在它前面的项。因此 “ab*” 匹配 “a”,”ab”,”abb”,”abbb”,等等。如要多次重复整个字符串,那么该字符串必须被组成一个项。组成一项的方法就是在它前面加 “\(“,后面加 “\)”。因此这个命令:

       /\(ab\)*

匹配: “ab”,”abab”,”ababab”,等等。而且也匹配 “”。

要避免匹配空字串,使用 “\+”。这表示前面一项可以被匹配一次或多次。

       /ab\+

匹配 “ab”,”abb”,”abbb”,等等。它不匹配 后面没有跟随 “b” 的 “a”。

要匹配一个可选项,用 “\=”。 例如:

       /folders\=

匹配 “folder” 和 “folders”。

4,指定重复次数

要匹配某一项的特定次数重复,使用 “\{n,m}” 这样的形式。其中 “n” 和 “m” 都是数字。在它前面的那个项将被重复 “n” 到 “m” 次 (|inclusive| 包含 “n” 和 “m”)。例如:

       /ab\{3,5}

匹配 “abbb”,”abbbb” 以及 “abbbbb”。

  当 “n” 省略时,被默认为零。当 “m” 省略时,被默认为无限大。当 “,m” 省略时,就表示重复正好 “n” 次。例如:

       模式 匹配次数

       \{,4} 0,1,2,3 或 4

       \{3,} 3,4,5,等等

       \{0,1} 0 或 1,同 \=

       \{0,} 0 或 更多,同 *

       \{1,} 1 或 更多,同 \+

       \{3} 3

5,多选一匹配

在一个查找模式中,”或” 运算符是 “\|”。例如:

       /foo\|bar

这个命令匹配了 “foo” 或 “bar”。更多的抉择可以连在后面:

       /one\|two\|three

匹配 “one”,”two” 或 “three”。

  如要匹配其多次重复,那么整个抉择结构须置于 “\(” 和 “\)” 之间:

       /\(foo\|bar\)\+

这个命令匹配 “foo”,”foobar”,”foofoo”,”barfoobar”,等等。

  再举个例子:

       /end\(if\|while\|for\)

这个命令匹配 “endif”,”endwhile” 和 “endfor”。

Centos 配置eth0 提示Device does not seem to be present

一.故障现象:[root@c1node01 ~]# service network restartShutting down loopback insterface:                                                       [   OK  ]Bringing up loopback insterface:                                                            [   OK  ]Bringing up interface eth0:  Device eth0 does not seem to be present,delaying initialization.                    [FAILED]解决办法:[root@c1node01 ~]# rm -rf /etc/udev/rules.d/70-persistent-net.rules[root@c1node01 ~]# reboot ………………[root@c1node01 ~]# service network restartShutting down loopback insterface:                                                         [   OK   ]Bringing up loopback insterface:                                                              [   OK   ]Bringing up interface eth0:                                                                     [   OK   ][root@c1node01 ~]# 二.另一种方法造成这样的原因,是因为在虚拟机(Vmware)中移动了Centos系统对应的文件,导致重新配置时,网卡的MAC地址变了,输入ifconfig -a,找不到eth0······· 安装完一个centos虚拟机,又拷贝一份,开机后网卡无法正常启动,报错:Device eth0 does not seem to be present, 
delaying initialization

解决:# mv /etc/sysconfig/network-scripts/ifcfg-eth0 
sysconfig/network-scripts/ifcfg-eth1

vim 
sysconfig/network-scripts/ifcfg-eth1

修改DEVICE=”eth0″ 
为DEVICE=”eth1″

然后重启启动网卡尝试下 三.比第一种更深入一点

故障前的操作:

DELL刀片装的是CentOS6.3的操作系统,网卡识别的是em1和em2,由于工作需要做了槽位调整,并启动了刀片

故障现象:

启动后网络不通,通过iDRAC登录后route查看缺省路由正常;

重启网络服务:

[root@nodeA ~]# service network restart Shutting down loopback insterface: [ OK ] Bringing up loopback insterface: [ OK ] Bringing up interface em1: Device em1 does not seem to be present,delaying initialization. [FAILED]

分析问题和解决:

之前在别的文章中我们提过70-persistent-net.rules文件,所以看了一下:

[root@nodeA ~]# vi /etc/udev/rules.d/70-persistent-net.rules

# This file was automatically generated by the /lib/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single # line, and change only the value of the NAME= key.

# PCI device 0x14e4:0x163a (bnx2) SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”, ATTR{address}==”24:b6:fd:ab:76:1e”, ATTR{type}==”1″, KERNEL==”eth*”, NAME=”eth1″

# PCI device 0x14e4:0x163a (bnx2) SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”, ATTR{address}==”24:b6:fd:ab:76:1c”, ATTR{type}==”1″, KERNEL==”eth*”, NAME=”eth0″

发现NAME的名称不正确,依次将上述红色字体中的eth0改为em1,eth1改为em2;

*切记:网卡编号由MAC地址大小决定,MAC越小网卡编号越小;

如下:

…………

# PCI device 0x14e4:0x163a (bnx2)

SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”, ATTR{address}==”24:b6:fd:ab:76:1e”, ATTR{type}==”1″, KERNEL==”eth*”, NAME=”em2″

# PCI device 0x14e4:0x163a (bnx2) SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”, ATTR{address}==”24:b6:fd:ab:76:1c”, ATTR{type}==”1″, KERNEL==”eth*”, NAME=”em1″

保存退出~!

[root@nodeA ~]#reboot

mac显示隐藏文件

1,显示方法:在“终端”输入命令defaults write com.apple.finder AppleShowAllFiles TRUEkillall Finder重启Finder,系统隐藏的文件都显示出来了。2,隐藏方法:在“终端”输入命令defaults write com.apple.finder AppleShowAllFiles FALSEkillall Finder即可。3,通过finder菜单中的“前往文件夹”输入路径,也可以直接访问隐藏的文件。4,如何隐藏自己的个人文件夹。同样:终端隐藏个人文件夹,输入 chflags hidden 文件路径取消隐藏:输入 chflags nohidden 文件路径

恢复excel内容

1.复制一份该文件,并将扩展名“xlsx”改成“zip”;2.打开此压缩文件,找到“xl”下的“sharedStrings.xml”并解压出来,保留此窗口;3. 用“记事本”将解压出来的文件“sharedStrings.xml”打开,使用查找替换功能将所有的“</r><si>”替换成“</r></si><si>”,并保存关闭;(不知道是否存在“</t><si>”等其它情况)4.将改好的文件拖回步骤2中的窗口,并确定关闭;5.将文件扩展名从“zip”改回“xlsx”即可。

从Git仓库中恢复已删除的分支、文件或丢失的commit

在使用Git的过程中,有时可能会有一些误操作比如:执行checkout -f 或 reset -hard 或 branch -d删除一个分支结果造成本地(远程)的分支或某些commit丢失可以通过reflog来进行恢复,前提是丢失的分支或commit信息没有被git gc清除
一般情况下,gc对那些无用的object会保留很长时间后才清除的reflog是git提供的一个内部工具,用于记录对git仓库进行的各种操作可以使用git reflog show或git log -g命令来看到所有的操作日志
恢复的过程很简单:
1. 通过git log -g命令来找到我们需要恢复的信息对应的commit_id,可以通过提交的时间和日期来辨别。一个好的办法是运行:1、git log –since=”2 weeks ago” — myfile 可以2个星期期间的myfile历史;2、git log –branches=”develop” 可以查看develop的commit
2. 通过git branch recover_branch[新分支] commit_id 来建立一个新的分支这样,我们就把丢失的东西给恢复到了recover_branch分支上了。
Q:如果是不小心执行了git reset,还有办法取消吗?A:git reflog 查看操作历史,找到之前 HEAD 的 hash 值,然后 git reset –hard 到那个 hash 即可。
Q:怎样找回历史版本中删除的文件?A:先确定需要恢复的文件要恢复成哪一个历史版本(commit),假设那个版本号是: commit_id,那么git checkout [commit_id] — <path_to_file>就可以恢复。

git常用命令

删除分支     本地:git branch -d branch_name     远程:git push origin —delete branch_name 

https方式每次都要输入密码,按照如下设置即可输入一次就不用再手输入密码的困扰而且又享受https带来的极速

设置记住密码(默认15分钟):

git config --global credential.helper cache

如果想自己设置时间,可以这样做:

git config credential.helper 'cache --timeout=3600'

这样就设置一个小时之后失效

长期存储密码:

git config --global credential.helper store

增加远程地址的时候带上密码也是可以的。(推荐)

http://yourname:password@git.oschina.net/name/project.git

补充:使用客户端也可以存储密码的。

如果你正在使用ssh而且想体验https带来的高速,那么你可以这样做: 切换到项目目录下 :

cd projectfile/

移除远程ssh方式的仓库地址

git remote rm origin

增加https远程仓库地址

git remote add origin http://yourname:password@git.oschina.net/name/project.git

启动nginx

不能启动的表现:     /usr/local/app/nginx/sbin/nginx -s reload nginx: [error] open() “/usr/local/app/nginx/logs/nginx.pid” failed (2: No such file or directory)解决:     

sudo mkdir /usr/local/var/runthis error can occurs when nginx try to initialise pid file in localisation that doesn’t exist.

/usr/local/app/nginx/sbin/nginx -c /usr/local/app/nginx/conf/nginx.conf
使用service nginx start:      需要添加一个脚本:    /etc/init.d/nginx        然后nginx配置中启用nginx的daemon on      再chkconfig nginx on,开机自动启动; 或者 echo “service nginx start ”>>/etc/rc.local (这是使用者自订开机启动程序)

服务器重启

所有服务都在一台机器上的话,启动supervisord和mysql就可以了
echo “/usr/local/app/supervisord/bin/supervisord -c /usr/local/app/supervisord/conf/supervisord.lnmp.conf ”>>/etc/rc.local
测试环境里就是nginx、crontab、mysql、mongodb、redis、rsync、php-fpm

/usr/bin/supervisord -c /usr/local/app/supervisord/supervisord.conf
/usr/bin/supervisorctl -c /usr/local/app/supervisord/supervisord.conf

Linux常用命令

linux下快速跳转到所需目录

    $ vi my_path

cd 要切换到的目录 

    $ . my_path

替换内容

    sed -i ‘s/原来内容/新内容/g’ 文件地址 这样这个文件从头到尾,全部内容就更换了。

    如果替换的内容有空格之类的,加上双引号””屏蔽掉,或者用转义字符\

    find -name ‘要查找的文件名’ | xargs perl -pi -e ‘s|被替换的字符串|替换后的字符串|g’
      空格、制表符      sed ‘s/[[:space:]][[:space:]]*/,/g’

替换文件内容

    sed -i ‘s///g’ db_*

基于http方式跨平台的文件共享

    python -m SimpleHTTPServer 8000
 查找:  find / -name supervisor*

下面的命令可以查看 ‘cache’ 认证助手的所有配置: 
 LC_ALL=zh_CN
SCP:     scp  -P 60066 -r /file  dev@:/home/dest/        scp -r root@123.56.90.178:/usr/local/app/mysql .

php curl 获取数据不完整

curl获取数据的时候,结果的字符串长度比较大。 相同的结果每次获取的数据都不全,并且长度也不一样。

试着把 HEADER信息修改为except: 但还是不行(这个可以解决的问题是数据量太大导致获取结果为空的情况)。

去掉

CURLOPT_RETURNTRANSFER = true
可以打印出完整数据

解决方案:

修改数据源服务器的nginx缓存配置

fastcgi_buffers 由原来的 8128k修改到81M

以下引自https://segmentfault.com/a/1190000007513677

Nginx的buffer机制,对于来自 FastCGI Server 的 Response,Nginx 将其缓冲到内存中,然后依次发送到客户端浏览器。缓冲区的大小由 fastcgi_buffers 和 fastcgi_buffer_size 两个值控制。
比如如下配置:
fastcgi_buffers 8 4K;
fastcgi_buffer_size 4K;
fastcgi_buffers 控制 nginx 最多创建 8 个大小为 4K 的缓冲区,而 fastcgi_buffer_size 则是处理 Response 时第一个缓冲区的大小,不包含在前者中。所以总计能创建的最大内存缓冲区大小是 84K+4K = 36k。而这些缓冲区是根据实际的 Response 大小动态生成的,并不是一次性创建的。比如一个 8K 的页面,Nginx 会创建 24K 共 2 个 buffers。
当 Response 小于等于 36k 时,所有数据当然全部在内存中处理。如果 Response 大于 36k 呢?fastcgi_temp 的作用就在于此。多出来的数据会被临时写入到文件中,放在这个目录下面。
内存中缓冲了 36Kb,剩下的会写入的文件中。而实际的情况是,运行 Nginx Process 的用户并没有 fastcgi_temp 目录的写权限,于是剩下的数据就丢失掉了。
————————————————
版权声明:本文为CSDN博主「冰峰雪岭」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/glovenone/article/details/72650133

Linux下文件去重

有多个文件,每个文件都有交集。 现在要将每个文件去重。

这里使用到3个命令:cat、sort、uniq

cat查看文件内容

sort排序

uniq去重

  1. 取几个文件的并集 cat fileA fileB fileC | sort | uniq

➜ test cat test1
a1
a2
a3
a1
➜ test sort test1
a1
a1
a2
a3
➜ test sort test1 | uniq
a1
a2
a3

  1. 取几个文件的交集 cat fileA fileB fileC | sort | uniq -d

➜ test sort test1 | uniq -d
a1

  1. 取几个文件不重复的部分 cat fileA fileB fileC | sort | uniq -u

➜ test sort test1 | uniq -d
a1

CentOS7 手动部署lnmp环境

步骤一:准备编译环境
关闭防火墙。
运行systemctl status firewalld命令,查看当前防火墙的状态。

如果防火墙的状态参数是inactive,则防火墙为关闭状态。
如果防火墙的状态参数是active,则防火墙为开启状态。
关闭防火墙。如果防火墙为关闭状态可以忽略此步骤。
如果您想临时关闭防火墙,需要运行以下命令:
systemctl stop firewalld
说明 临时关闭防火墙后,如果Linux实例重启,则防火墙将会自动开启。

如果您想永久关闭防火墙,需要依次运行以下命令:
关闭防火墙。
systemctl stop firewalld
实例开机时,禁止启动防火墙服务。
systemctl disable firewalld
关闭SELinux。
运行getenforce命令查看SELinux的当前状态。
如果SELinux状态参数是Disabled,则SELinux为关闭状态。
如果SELinux状态参数是Enforcing,则SELinux为开启状态。
关闭SELinux。如果SELinux为关闭状态可以忽略此步骤。
步骤二:安装Nginx
运行以下命令安装Nginx。
yum -y install nginx
运行以下命令查看Nginx版本。
nginx -v
返回结果如下所示,表示Nginx安装成功。
nginx version: nginx/1.20.1
步骤三:安装MySQL
运行以下命令更新YUM源。
rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
运行以下命令安装MySQL。
说明 如果您使用的操作系统内核版本为el8,可能会提示报错信息No match for argument。您需要先运行命令yum module disable mysql禁用默认的MySQL模块,再安装MySQL。

yum -y install mysql-community-server
运行以下命令查看MySQL版本号。
mysql -V
返回结果如下所示,表示MySQL安装成功。
mysql Ver 14.14 Distrib 5.7.36, for Linux (x86_64) using EditLine wrapper
运行以下命令启动MySQL。
systemctl start mysqld
依次运行以下命令设置开机启动MySQL。
systemctl enable mysqld
systemctl daemon-reload
步骤四:安装PHP
更新YUM源。
运行以下命令添加epel源。
yum install \
https://repo.ius.io/ius-release-el7.rpm \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
运行以下命令添加Webtatic源。
rpm -ivh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
运行以下命令安装PHP。
yum -y install php71w-devel php71w.x86_64 php71w-cli.x86_64 php71w-common.x86_64 php71w-gd.x86_64 php71w-ldap.x86_64 php71w-mbstring.x86_64 php71w-mcrypt.x86_64 php71w-pdo.x86_64 php71w-mysqlnd php71w-fpm php71w-opcache php71w-pecl-redis php71w-pecl-mongodb

运行以下命令查看PHP版本。
php -v
返回结果如下所示,表示安装成功。
PHP 7.0.33 (cli) (built: Dec 6 2018 22:30:44) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.33, Copyright (c) 1999-2017, by Zend Technologies
步骤五:配置Nginx
运行以下命令备份Nginx配置文件。
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
修改Nginx配置文件,添加Nginx对PHP的支持。
说明 若不添加此配置信息,后续您使用浏览器访问PHP页面时,页面将无法显示。

运行以下命令打开Nginx配置文件。
vim /etc/nginx/nginx.conf
按i进入编辑模式。
在server大括号内,修改或添加下列配置信息。除下面提及的需要添加或修改的配置信息外,其他配置保持默认值即可。
添加或修改location /配置信息。
location / {
index index.php index.html index.htm;
}
添加或修改location ~ .php$配置信息。
#添加下列信息,配置Nginx通过fastcgi方式处理您的PHP请求。
location ~ .php$ {
root /usr/share/nginx/html; #将/usr/share/nginx/html替换为您的网站根目录,本文使用/usr/share/nginx/html作为网站根目录。
fastcgi_pass 127.0.0.1:9000; #Nginx通过本机的9000端口将PHP请求转发给PHP-FPM进行处理。
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params; #Nginx调用fastcgi接口处理PHP请求。
}
添加或修改配置信息后,文件内容如下图所示:

按下Esc键后,输入:wq并回车以保存关闭配置文件。
运行以下命令启动Nginx服务。
systemctl start nginx
运行以下命令设置Nginx服务开机自启动。
systemctl enable nginx
步骤六:配置MySQL
运行以下命令查看/var/log/mysqld.log文件,获取并记录root用户的初始密码。
grep ‘temporary password’ /var/log/mysqld.log
命令行返回结果如下,其中ARQTRy3+n8W为MySQL的初始密码。在下一步重置root用户密码时,会使用该初始密码。 2021-11-10T07:01:26.595215Z 1 [Note] A temporary password is generated for root@localhost: ARQTRy3+n8W
运行以下命令配置MySQL的安全性。
mysql_secure_installation
输入MySQL的初始密码。
说明 在输入密码时,系统为了最大限度的保证数据安全,命令行将不做任何回显。您只需要输入正确的密码信息,然后按Enter键即可。

Securing the MySQL server deployment.

Enter password for user root: #输入上一步获取的root用户初始密码
为MySQL设置新密码。
The existing password for the user account root has expired. Please set a new password.

New password: #输入新密码。长度为8至30个字符,必须同时包含大小写英文字母、数字和特殊符号。特殊符号包含()` ~!@#$%^&*-+=|{}[]:;‘<>,.?/

Re-enter new password: #确认新密码。
The ‘validate_password’ plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.

Estimated strength of the password: 100 #返回结果包含您设置的密码强度。
Change the password for root ? ((Press y|Y for Yes, any other key for No) :Y #您需要输入Y以确认使用新密码。

新密码设置完成后,需要再次验证新密码。

New password:#再次输入新密码。

Re-enter new password:#再次确认新密码。

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :Y #您需要输入Y,再次确认使用新密码。

输入Y删除匿名用户。
Remove anonymous users? (Press y|Y for Yes, any other key for No) :Y
Success.
输入Y禁止使用root用户远程登录MySQL。
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :Y
Success.
输入Y删除test库以及用户对test库的访问权限。
Remove test database and access to it? (Press y|Y for Yes, any other key for No) :Y

  • Dropping test database…
    Success.
  • Removing privileges on test database…
    Success.
    输入Y重新加载授权表。
    Reload privilege tables now? (Press y|Y for Yes, any other key for No) :Y
    Success.

All done!
步骤七:配置PHP
新建并编辑phpinfo.php文件,用于展示PHP信息。
运行以下命令新建phpinfo.php文件。
vim <网站根目录>/phpinfo.php
<网站根目录>是您在nginx.conf配置文件中location ~ .php$大括号内,配置的root参数值,如下图所示。

本文配置的网站根目录为/usr/share/nginx/html,因此需要运行以下命令新建phpinfo.php文件:
vim /usr/share/nginx/html/phpinfo.php
按i进入编辑模式。
输入下列内容,函数phpinfo()​会展示PHP的所有配置信息。

按Esc键后,输入:wq并回车,保存关闭配置文件。
运行以下命令启动PHP-FPM。
systemctl start php-fpm
运行以下命令设置PHP-FPM开机自启动。
systemctl enable php-fpm
步骤八:测试访问LNMP配置信息页面
在本地Windows主机或其他具有公网访问能力的Windows主机中,打开浏览器。
在浏览器的地址栏输入http:///phpinfo.php进行访问。
访问结果如下图所示,表示LNMP环境部署成功。

后续步骤
测试访问LNMP配置信息页面后,建议您运行以下命令将phpinfo.php文件删除,消除数据泄露风险。

rm -rf <网站根目录>/phpinfo.php
其中,<网站根目录>需要替换为您在nginx.conf中配置的网站根目录。本文配置的网站根目录为/usr/share/nginx/html,因此需要运行以下命令:

rm -rf /usr/share/nginx/html/phpinfo.php
常见问题
如何使用其他版本的Nginx服务器?

使用浏览器访问Nginx开源社区获取对应的Nginx版本的下载链接。
请根据您的个人需求,选择对应的Nginx版本。本章节以Nginx 1.8.1为例。

远程连接需要部署LNMP环境的ECS实例。
运行wget命令下载Nginx 1.8.1。您可以通过Nginx开源社区直接获取对应版本的安装包URL,然后通过wget URL的方式将Nginx安装包下载至ECS实例。例如,Nginx 1.8.1的下载命令如下:
wget http://nginx.org/download/nginx-1.8.1.tar.gz
运行以下命令,安装Nginx相关依赖。
yum install -y gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
运行以下命令,解压Nginx 1.8.1安装包,然后进入Nginx所在的文件夹。
tar zxvf nginx-1.8.1.tar.gz
cd nginx-1.8.1
依次运行以下命令,编译源码。
./configure \
–user=nobody \
–group=nobody \
–prefix=/usr/local/nginx \
–with-http_stub_status_module \
–with-http_gzip_static_module \
–with-http_realip_module \
–with-http_sub_module \
–with-http_ssl_module
make && make install
运行以下命令,进入Nginx的sbin目录,然后启动Nginx。
cd /usr/local/nginx/sbin/
./nginx
在本地主机中,使用浏览器访问ECS实例公网IP。
出现如下图所示的页面,表示Nginx已成功安装并启动。