nginx网站服务
zyw327

nginx网站服务

目录一、nginx服务基础1.nginx概述2.nginx和apache的差异二、编译安装nginx1.关闭防火墙,将安装nginx软件包传到/opt目录下2.安装依赖包3.创建运行用户、组4.编译安装nginx5.检查、启动、重启、停止nginx服务三、nginx访问控制1.认识ngnix服务的主配置文件nginx.conf2.访问状态统计配置3.基于授权的访问控制4.基于客户端的访问控制四、nginx虚拟主机1.基于域名的nginx虚拟主机2.基于IP的nginx虚拟主机3.基于端口的nginx寻主机总结一、nginx服务基础1.nginx概述nginx是一款高性能、轻量级的web服务软件,具有以下特点:稳定性高系统资源消耗低对HTTP并发连接的处理能力高(单台物理服务器可支持30000~50000个并发请求)2.nginx和apache的差异nginx是一个基于事件的web服务器,apache是一个基于流程的服务器;nginx所有请求都由一个线程处理,apache单个线程处理单个请求;nginx避免子进程的概念,apache是基于子进程的;nginx在内存消耗和连接方面更好,apache在内存消耗和连接方面一般;nginx的性能和可伸缩性不依赖于硬件,apache依赖于CPU和内存等硬件;nginx支持热部署,apache不支持热部署;nginx对于静态文件处理具有更高效率,apache相对一般;nginx在反向代理场景具有明显优势,apache相对一般。二、编译安装nginx1.关闭防火墙,将安装nginx软件包传到/opt目录下[root@localhost~]#systemctlstopfirewalld[root@localhost~]#systemctldisablefirewalld[root@localhost~]#setenforce0setenforce:SELinuxisdisabled[root@localhostopt]#cd/opt[root@localhostopt]#lsnginx-1.12.0.tar.gznginx-1.12.2.tar.gzrh2.安装依赖包ngnix的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。[root@localhostopt]#yuminstall-ypcre-develzlib-develgccgcc-c++make3.创建运行用户、组nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限[root@localhostnginx-1.12.0]#useradd-M-s/sbin/nologinnginx4.编译安装nginx[root@localhostopt]#tarzxvfnginx-1.12.0.tar.gz-C/opt/[root@localhostopt]#cdnginx-1.12.0/[root@localhostnginx-1.12.0]#./configure\>--prefix=/usr/local/nginx\#指定nginx的安装路径>--user=nginx\#指定用户名>--group=nginx\#指定组名>--with-http_stub_status_module#启用http_stub_status_module模块以支持状态统计[root@localhostnginx-1.12.0]#make-j2&&makeinstall#编译并安装[root@localhostnginx-1.12.0]#ln-s/usr/local/nginx/sbin/nginx/usr/local/sbin#让系统识别nginx的操作命令5.检查、启动、重启、停止nginx服务检查[root@localhostnginx-1.12.0]#nginx-t#检查配置文件是否配置正确nginx:theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisoknginx:configurationfile/usr/local/nginx/conf/nginx.conftestissuccessful启动[root@localhostnginx-1.12.0]#nginx#启动nginx看nginx进程号的几种方法方法一:catnginx.pid文件方法二:prepnginx方法三:lsof-i:端口号方法四:psaux/-elf|grepnginx方法五:netstat/ss-natp|grepnginx[root@localhostnginx-1.12.0]#cat/usr/local/nginx/logs/nginx.pid11212[root@localhostnginx-1.12.0]#pgrepnginx1121211213[root@localhostnginx-1.12.0]#lsof-i:80COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAMEnginx11212root6uIPv41110570t0TCP*:http(LISTEN)nginx11213nginx6uIPv41110570t0TCP*:http(LISTEN)[root@localhostnginx-1.12.0]#psaux|grepnginxroot112120.00.020496604?Ss04:550:00nginx:masterprocessnginxnginx112130.00.0230241384?S04:550:00nginx:workerprocessroot112530.00.0112676976pts/1R+04:590:00grep--color=autonginx[root@localhostnginx-1.12.0]#ps-elf|grepnginx1Sroot1121210800-5124sigsus04:55?00:00:00nginx:masterprocessnginx5Snginx11213112120800-5756ep_pol04:55?00:00:00nginx:workerprocess0Rroot1126422110800-28169-05:00pts/100:00:00grep--color=autonginx[root@localhostnginx-1.12.0]#ss-natp|grepnginxLISTEN0128*:80*:*users:(("nginx",pid=11213,fd=6),("nginx",pid=11212,fd=6))[root@localhostnginx-1.12.0]#netstat-natp|grepnginxtcp000.0.0.0:800.0.0.0:*LISTEN11212/nginx:master停止nginx的几种方法方法一:kill-3进程号方法二:kill-sQUIT进程号方法三:killall-3nginx方法四:killall-sQUITnginx[root@localhostnginx-1.12.0]#kill-311212[root@localhostnginx-1.12.0]#nginx[root@localhostnginx-1.12.0]#cat/usr/local/nginx/logs/nginx.pid11337[root@localhostnginx-1.12.0]#kill-sQUIT11337[root@localhostnginx-1.12.0]#nginx[root@localhostnginx-1.12.0]#killall-3nginx[root@localhostnginx-1.12.0]#nginx[root@localhostnginx-1.12.0]#killall-sQUITnginx重载nginx的集中方法方法一:kill-1进程号方法二:kill-sHUP进程号方法三:killall-1nginx方法四:killall-sHUPnginx[root@localhostnginx-1.12.0]#nginx[root@localhostnginx-1.12.0]#cat/usr/local/nginx/logs/nginx.pid11427[root@localhostnginx-1.12.0]#kill-111427[root@localhostnginx-1.12.0]#cat/usr/local/nginx/logs/nginx.pid11427[root@localhostnginx-1.12.0]#kill-sHUP11427[root@localhostnginx-1.12.0]#killall-1nginx[root@localhostnginx-1.12.0]#killall-sHUPnginx日志分割,重新打开日志文件[root@localhostnginx-1.12.0]#cat/usr/local/nginx/logs/nginx.pid11427[root@localhostnginx-1.12.0]#kill-USR111427平滑升级[root@localhostnginx-1.12.0]#cat/usr/local/nginx/logs/nginx.pid11427[root@localhostnginx-1.12.0]#kill-USR211427版本升级[root@localhostopt]#tar-zxvfnginx-1.12.2.tar.gz[root@localhostnginx-1.12.2]#./configure\>--prefix=/usr/local/nginx\>--user=nginx\>--group=nginx\>--with-http_stub_status_module\>--with-http_ssl_module[root@localhostnginx-1.12.2]#make[root@localhostnginx-1.12.2]#mv/usr/local/nginx/sbin/nginx/usr/local/nginx/sbin/nginx_old[root@localhostnginx-1.12.2]#cpobjs/nginx/usr/local/nginx/sbin/nginx[root@localhostnginx-1.12.2]#makeupgrade#也可先killallnginx,再/usr/local/nginx/sbin/nginx[root@localhostnginx-1.12.2]#nginx-vnginxversion:nginx/1.12.2添加nginx系统服务方法一[root@localhostnginx-1.12.2]#cat/etc/init.d/nginx#!/bin/bash#chkconfig:-9920#description:NginxServiceControlScriptCOM="/usr/local/nginx/sbin/nginx"PID="/usr/local/nginx/logs/nginx.pid"case"$1"instart)$COM;;stop)kill-sQUIT$(cat$PID);;restart)$0stop$0start;;reload)kill-sHUP$(cat$PID);;*)echo"Usage:$0{start|stop|restart|reload}"exit1esacexit0[root@localhostnginx-1.12.2]#chmod+x/etc/init.d/nginx[root@localhostnginx-1.12.2]#chkconfig--addnginx#添加为系统服务[root@localhostnginx-1.12.2]#systemctlstopnginx[root@localhostnginx-1.12.2]#systemctlstartnginx方法二[root@localhostnginx-1.12.2]#chmod754/lib/systemd/system/nginx.service[root@localhostnginx-1.12.2]#cat/lib/systemd/system/nginx.service[Unit]#服务的说明Description=nginx#描述服务After=network.target#依赖,当依赖的服务启动之后再启动自定义的服务[Service]#服务运行参数的设置Type=forking#forking是后台运行的形式,使用此启动类型应同时指定PIDFile=,以便systemd能够跟踪服务的主进程。PIDFile=/usr/local/nginx/logs/nginx.pid#进程号文件的查看路径ExecStart=/usr/local/nginx/sbin/nginx#服务的具体运行命令ExecReload=/bin/klll-sHUP$MAINPID#重载命令ExecStop=/bin/kill-sQUIT$MAINPID#停止命令PrivateTmp=true#表示给服务分配独立的临时空间[Install]#服务安装的相关设置,可设置为多用户WantedBy=multi-user.target[root@localhostnginx-1.12.2]#systemctlstopnginx.service[root@localhostnginx-1.12.2]#systemctlstartnginx.service[root@localhostnginx-1.12.2]#systemctlenablenginx.serviceCreatedsymlinkfrom/etc/systemd/system/multi-user.target.wants/nginx.serviceto/usr/lib/systemd/system/nginx.service.注:启动、重启、停止等命令全部要求使用绝对路径三、nginx访问控制1.认识ngnix服务的主配置文件nginx.confvim/usr/local/nginx/conf/nginx.conf全局配置#usernobody;#运行用户,若编译时未指定则默认为nobodyworker_process1;#工作进程数量,可配置成服务器内核数*2,如果网站访问量不大,一般设为1就够用了#error_loglogs/error.log;#错误日志文件的位置#pidlogs/nginx.pid;#PID文件的位置I/O事件配置events{useepoll;#使用epoll模型,2.6及以上版本的系统内核,加你使用epoll模型以提高性能worker_connections1024;#每个进程处理1024个连接}若提高每个进程的链接数还需执行"ulimit-n65535"命令临时修改本地每个进程可以同时打开的最大文件数。在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用"ulimit-a"命令查看系统允许当前用户进程打开的文件数限制。HTTP配置http{##文件扩展名与文件类型映射表includemime.types;##默认文件类型default_typeapplication/octet-stream;##日志格式设定#log_formatmain'$remote_addr-$remote_user[$time_local]"$request"'#'$status$body_bytes_sent"$http_referer"'#'"$http_user_agent""$http_x_forwarded_for"';##访问日志位置#access_loglogs/access.logmain;##支持文件发送(下载)sendfileon;##此选项允许或禁止使用socket的TCP_CORK的选项(发送数据包前下缓存数据),此选项仅在使用sendfile的时候使用#tcp_nopushon;##连接保持的最大时间,单位为秒#keepalive_timeout0;keepalive_timeout65;##gzip模块设置,设置是否再起gzip压缩输出#gzipon;##web服务的监听配置server{##监听地址及端口listen80;##站点域名,可以有多个,用空格隔开server_namelocalhost;##网页的默认字符集,可修改为万国字符集utf-8#charsetkoi8-r;#access_loglogs/host.access.logmain;##根目录配置location/{##网站根目录位置默认为/usr/local/nginx/htmlroothtml;##默认首页文件名indexindex.htmlindex.htm;}#error_page404/404.html;#redirectservererrorpagestothestaticpage/50x.html###内部错误的反馈页面error_page500502503504/50x.html;##错误页面配置location=/50x.html{roothtml;}#proxythePHPscriptstoApachelisteningon127.0.0.1:80##location~\.php${#proxy_passhttp://127.0.0.1;#}#passthePHPscriptstoFastCGIserverlisteningon127.0.0.1:9000##location~\.php${#roothtml;#fastcgi_pass127.0.0.1:9000;#fastcgi_indexindex.php;#fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name;#includefastcgi_params;#}#denyaccessto.htaccessfiles,ifApache'sdocumentroot#concurswithnginx'sone##location~/\.ht{#denyall;#}}1)日志格式设定$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;$remote_user:用来记录客户端用户名称;$time_out:用来记录访问时间与时区;$request:用来记录请求的url与http协议;$status:用来记录请求状态,成功是200;$body_bytes_sent:记录发送给客户端文件主体内容大小;$http_referer:用来记录从哪个页面链接访问过来;$http_user_agent:记录客户浏览器的相关信息;通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。2)location的配置location常见配置指令root、alias、proxy_passroot为根路径配置alias为别名设置proxy_pass为反向代理配置2.访问状态统计配置先使用命令“/usr/local/nginx/sbin/nginx-V”查看已安装的nginx是否包含“HTTP_STUB_STATUS”模块修改nginx.conf配置文件,指定访问位置并添加stub_status配置vim/usr/local/nginx/conf/nginx.conf......server{listen80;server_namewww.test.com;charsetutf-8;#access_loglogs/host.access.logmain;location/{roothtml;indexindex.htmlindex.htm;}location/status{stub_statuson;access_logoff;}}......重启服务,访问测试[root@localhostconf]#systemctlrestartnginx[root@localhostconf]#echo"192.168.122.10www.test.com">>/etc/hostsActiveconnections:1#当前的活动链接数serveracceptshandledrequests#已经处理的连接信息111#已处理的连接数、成功的TCP握手次数、已处理的请求数Reading:0Writing:1Waiting:0#正在读、写以及等待的连接数可使用“curlwww.test.com/status”结合awk与if语句进行性能监控[root@localhostopt]#catconnect.sh#!/bin/bashcurl-swww.test.com/status>active.txtconnect=$(awk'/Active/{print$3}'active.txt)if[$connect-ge1];thenecho"当前链接数为$connect,链接数过高,请注意!"fi[root@localhostopt]#./connect.sh当前链接数为1,链接数过高,请注意!3.基于授权的访问控制生成用户密码认证文件[root@localhostopt]#yuminstall-yhttpd-tools[root@localhostopt]#htpasswd-c/usr/local/nginx/passwd.db123Newpassword:Re-typenewpassword:Addingpasswordforuser123[root@localhostopt]#chownnginx/usr/local/nginx/passwd.db[root@localhostopt]#chmod400/usr/local/nginx/passwd.db修改主配置文件相对应目录,添加认证配置项vim/usr/local/nginx/conf/nginx.conf......location/{roothtml;indexindex.htmlindex.htm;##添加认证配置auth_basic"secret";##设置密码提示框文字信息auth_basic_user_file/usr/local/nginx/passwd.db;}......重启服务,访问测试[root@localhostopt]#nginx-tnginx:theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisoknginx:configurationfile/usr/local/nginx/conf/nginx.conftestissuccessful[root@localhostopt]#systemctlrestartnginx4.基于客户端的访问控制访问控制规则如下:denyIP/IP段:拒绝某个IP或IP段的客户端访问;allowIP/IP段:允许某个IP或IP段的客户端访问。规则从上往下执行,若匹配则停止,不再往下匹配······location/{roothtml;indexindex.htmlindex.htm;auth_basic"secret";auth_basic_user_file/usr/local/nginx/passwd.db;deny192.168.122.10;allowall;}······四、nginx虚拟主机1.基于域名的nginx虚拟主机为虚拟主机提供域名解析[root@localhostconf]#echo"192.168.122.10www.test.comwww.abc.com">>/etc/hosts为虚拟主机准备网页文档[root@localhostlogs]#mkdir-p/var/www/html/test[root@localhostlogs]#mkdir-p/var/www/html/abc[root@localhostlogs]#echo"<h1>www.test.com</h1>">/var/www/html/test/index.html[root@localhostlogs]#echo"<h1>www.abc.com</h1>">/var/www/html/abc/index.html修改nginx的配置文件......server{listen80;server_namewww.test.com;charsetutf-8;access_loglogs/test.access.log;location/{root/var/www/html/test;indexindex.htmlindex.htm;}}server{listen80;server_namewww.abc.com;charsetutf-8;access_loglogs/abc.access.log;location/{root/var/www/html/abc;indexindex.htmlindex.htm;}}......重启服务,访问测试[root@localhostlogs]#nginx-tnginx:theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisoknginx:configurationfile/usr/local/nginx/conf/nginx.conftestissuccessful[root@localhostlogs]#systemctlrestartnginx2.基于IP的nginx虚拟主机添加网卡[root@localhostlogs]#ifconfigens33:0192.168.122.11netmask255.255.255.0[root@localhostlogs]#ifconfigens33:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet192.168.122.10netmask255.255.255.0broadcast192.168.122.255inet6fe80::7350:3abe:ece6:290dprefixlen64scopeid0x20<link>ether00:0c:29:59:be:betxqueuelen1000(Ethernet)RXpackets615077bytes887122536(846.0MiB)RXerrors0dropped0overruns0frame0TXpackets69849bytes5350698(5.1MiB)TXerrors0dropped0overruns0carrier0collisions0ens33:0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet192.168.122.11netmask255.255.255.0broadcast192.168.122.255ether00:0c:29:59:be:betxqueuelen1000(Ethernet)修改nginx的配置文件......server{listen192.168.122.10:80;server_namewww.test.com;charsetutf-8;access_loglogs/test.access.log;location/{root/var/www/html/test;indexindex.htmlindex.htm;}}server{listen192.168.122.11:80;server_namewww.abc.com;charsetutf-8;access_loglogs/abc.access.log;location/{root/var/www/html/abc;indexindex.htmlindex.htm;}}......重启服务,访问测试[root@localhostlogs]#nginx-tnginx:theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisoknginx:configurationfile/usr/local/nginx/conf/nginx.conftestissuccessful[root@localhostlogs]#systemctlrestartnginx3.基于端口的nginx寻主机修改nginx的配置文件......server{listen192.168.122.10:80;server_namewww.test.com;charsetutf-8;access_loglogs/test.access.log;location/{root/var/www/html/test;indexindex.htmlindex.htm;}}server{listen192.168.122.10:8888;server_namewww.abc.com;charsetutf-8;access_loglogs/abc.access.log;location/{root/var/www/html/abc;indexindex.htmlindex.htm;}}......重启服务,访问测试[root@localhostlogs]#nginx-tnginx:theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisoknginx:configurationfile/usr/local/nginx/conf/nginx.conftestissuccessful[root@localhostlogs]#systemctlrestartnginx总结Nginx这里很重要,及时阅读,收获更快

架构 358 2月前
nginx网站服务
zyw327

nginx网站服务

目录一、nginx服务基础1.nginx概述2.nginx和apache的差异二、编译安装nginx1.关闭防火墙,将安装nginx软件包传到/opt目录下2.安装依赖包3.创建运行用户、组4.编译安装nginx5.检查、启动、重启、停止nginx服务三、nginx访问控制1.认识ngnix服务的主配置文件nginx.conf2.访问状态统计配置3.基于授权的访问控制4.基于客户端的访问控制四、nginx虚拟主机1.基于域名的nginx虚拟主机2.基于IP的nginx虚拟主机3.基于端口的nginx寻主机总结一、nginx服务基础1.nginx概述nginx是一款高性能、轻量级的web服务软件,具有以下特点:稳定性高系统资源消耗低对HTTP并发连接的处理能力高(单台物理服务器可支持30000~50000个并发请求)2.nginx和apache的差异nginx是一个基于事件的web服务器,apache是一个基于流程的服务器;nginx所有请求都由一个线程处理,apache单个线程处理单个请求;nginx避免子进程的概念,apache是基于子进程的;nginx在内存消耗和连接方面更好,apache在内存消耗和连接方面一般;nginx的性能和可伸缩性不依赖于硬件,apache依赖于CPU和内存等硬件;nginx支持热部署,apache不支持热部署;nginx对于静态文件处理具有更高效率,apache相对一般;nginx在反向代理场景具有明显优势,apache相对一般。二、编译安装nginx1.关闭防火墙,将安装nginx软件包传到/opt目录下[root@localhost~]#systemctlstopfirewalld[root@localhost~]#systemctldisablefirewalld[root@localhost~]#setenforce0setenforce:SELinuxisdisabled[root@localhostopt]#cd/opt[root@localhostopt]#lsnginx-1.12.0.tar.gznginx-1.12.2.tar.gzrh2.安装依赖包ngnix的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。[root@localhostopt]#yuminstall-ypcre-develzlib-develgccgcc-c++make3.创建运行用户、组nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限[root@localhostnginx-1.12.0]#useradd-M-s/sbin/nologinnginx4.编译安装nginx[root@localhostopt]#tarzxvfnginx-1.12.0.tar.gz-C/opt/[root@localhostopt]#cdnginx-1.12.0/[root@localhostnginx-1.12.0]#./configure\>--prefix=/usr/local/nginx\#指定nginx的安装路径>--user=nginx\#指定用户名>--group=nginx\#指定组名>--with-http_stub_status_module#启用http_stub_status_module模块以支持状态统计[root@localhostnginx-1.12.0]#make-j2&&makeinstall#编译并安装[root@localhostnginx-1.12.0]#ln-s/usr/local/nginx/sbin/nginx/usr/local/sbin#让系统识别nginx的操作命令5.检查、启动、重启、停止nginx服务检查[root@localhostnginx-1.12.0]#nginx-t#检查配置文件是否配置正确nginx:theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisoknginx:configurationfile/usr/local/nginx/conf/nginx.conftestissuccessful启动[root@localhostnginx-1.12.0]#nginx#启动nginx看nginx进程号的几种方法方法一:catnginx.pid文件方法二:prepnginx方法三:lsof-i:端口号方法四:psaux/-elf|grepnginx方法五:netstat/ss-natp|grepnginx[root@localhostnginx-1.12.0]#cat/usr/local/nginx/logs/nginx.pid11212[root@localhostnginx-1.12.0]#pgrepnginx1121211213[root@localhostnginx-1.12.0]#lsof-i:80COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAMEnginx11212root6uIPv41110570t0TCP*:http(LISTEN)nginx11213nginx6uIPv41110570t0TCP*:http(LISTEN)[root@localhostnginx-1.12.0]#psaux|grepnginxroot112120.00.020496604?Ss04:550:00nginx:masterprocessnginxnginx112130.00.0230241384?S04:550:00nginx:workerprocessroot112530.00.0112676976pts/1R+04:590:00grep--color=autonginx[root@localhostnginx-1.12.0]#ps-elf|grepnginx1Sroot1121210800-5124sigsus04:55?00:00:00nginx:masterprocessnginx5Snginx11213112120800-5756ep_pol04:55?00:00:00nginx:workerprocess0Rroot1126422110800-28169-05:00pts/100:00:00grep--color=autonginx[root@localhostnginx-1.12.0]#ss-natp|grepnginxLISTEN0128*:80*:*users:(("nginx",pid=11213,fd=6),("nginx",pid=11212,fd=6))[root@localhostnginx-1.12.0]#netstat-natp|grepnginxtcp000.0.0.0:800.0.0.0:*LISTEN11212/nginx:master停止nginx的几种方法方法一:kill-3进程号方法二:kill-sQUIT进程号方法三:killall-3nginx方法四:killall-sQUITnginx[root@localhostnginx-1.12.0]#kill-311212[root@localhostnginx-1.12.0]#nginx[root@localhostnginx-1.12.0]#cat/usr/local/nginx/logs/nginx.pid11337[root@localhostnginx-1.12.0]#kill-sQUIT11337[root@localhostnginx-1.12.0]#nginx[root@localhostnginx-1.12.0]#killall-3nginx[root@localhostnginx-1.12.0]#nginx[root@localhostnginx-1.12.0]#killall-sQUITnginx重载nginx的集中方法方法一:kill-1进程号方法二:kill-sHUP进程号方法三:killall-1nginx方法四:killall-sHUPnginx[root@localhostnginx-1.12.0]#nginx[root@localhostnginx-1.12.0]#cat/usr/local/nginx/logs/nginx.pid11427[root@localhostnginx-1.12.0]#kill-111427[root@localhostnginx-1.12.0]#cat/usr/local/nginx/logs/nginx.pid11427[root@localhostnginx-1.12.0]#kill-sHUP11427[root@localhostnginx-1.12.0]#killall-1nginx[root@localhostnginx-1.12.0]#killall-sHUPnginx日志分割,重新打开日志文件[root@localhostnginx-1.12.0]#cat/usr/local/nginx/logs/nginx.pid11427[root@localhostnginx-1.12.0]#kill-USR111427平滑升级[root@localhostnginx-1.12.0]#cat/usr/local/nginx/logs/nginx.pid11427[root@localhostnginx-1.12.0]#kill-USR211427版本升级[root@localhostopt]#tar-zxvfnginx-1.12.2.tar.gz[root@localhostnginx-1.12.2]#./configure\>--prefix=/usr/local/nginx\>--user=nginx\>--group=nginx\>--with-http_stub_status_module\>--with-http_ssl_module[root@localhostnginx-1.12.2]#make[root@localhostnginx-1.12.2]#mv/usr/local/nginx/sbin/nginx/usr/local/nginx/sbin/nginx_old[root@localhostnginx-1.12.2]#cpobjs/nginx/usr/local/nginx/sbin/nginx[root@localhostnginx-1.12.2]#makeupgrade#也可先killallnginx,再/usr/local/nginx/sbin/nginx[root@localhostnginx-1.12.2]#nginx-vnginxversion:nginx/1.12.2添加nginx系统服务方法一[root@localhostnginx-1.12.2]#cat/etc/init.d/nginx#!/bin/bash#chkconfig:-9920#description:NginxServiceControlScriptCOM="/usr/local/nginx/sbin/nginx"PID="/usr/local/nginx/logs/nginx.pid"case"$1"instart)$COM;;stop)kill-sQUIT$(cat$PID);;restart)$0stop$0start;;reload)kill-sHUP$(cat$PID);;*)echo"Usage:$0{start|stop|restart|reload}"exit1esacexit0[root@localhostnginx-1.12.2]#chmod+x/etc/init.d/nginx[root@localhostnginx-1.12.2]#chkconfig--addnginx#添加为系统服务[root@localhostnginx-1.12.2]#systemctlstopnginx[root@localhostnginx-1.12.2]#systemctlstartnginx方法二[root@localhostnginx-1.12.2]#chmod754/lib/systemd/system/nginx.service[root@localhostnginx-1.12.2]#cat/lib/systemd/system/nginx.service[Unit]#服务的说明Description=nginx#描述服务After=network.target#依赖,当依赖的服务启动之后再启动自定义的服务[Service]#服务运行参数的设置Type=forking#forking是后台运行的形式,使用此启动类型应同时指定PIDFile=,以便systemd能够跟踪服务的主进程。PIDFile=/usr/local/nginx/logs/nginx.pid#进程号文件的查看路径ExecStart=/usr/local/nginx/sbin/nginx#服务的具体运行命令ExecReload=/bin/klll-sHUP$MAINPID#重载命令ExecStop=/bin/kill-sQUIT$MAINPID#停止命令PrivateTmp=true#表示给服务分配独立的临时空间[Install]#服务安装的相关设置,可设置为多用户WantedBy=multi-user.target[root@localhostnginx-1.12.2]#systemctlstopnginx.service[root@localhostnginx-1.12.2]#systemctlstartnginx.service[root@localhostnginx-1.12.2]#systemctlenablenginx.serviceCreatedsymlinkfrom/etc/systemd/system/multi-user.target.wants/nginx.serviceto/usr/lib/systemd/system/nginx.service.注:启动、重启、停止等命令全部要求使用绝对路径三、nginx访问控制1.认识ngnix服务的主配置文件nginx.confvim/usr/local/nginx/conf/nginx.conf全局配置#usernobody;#运行用户,若编译时未指定则默认为nobodyworker_process1;#工作进程数量,可配置成服务器内核数*2,如果网站访问量不大,一般设为1就够用了#error_loglogs/error.log;#错误日志文件的位置#pidlogs/nginx.pid;#PID文件的位置I/O事件配置events{useepoll;#使用epoll模型,2.6及以上版本的系统内核,加你使用epoll模型以提高性能worker_connections1024;#每个进程处理1024个连接}若提高每个进程的链接数还需执行"ulimit-n65535"命令临时修改本地每个进程可以同时打开的最大文件数。在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用"ulimit-a"命令查看系统允许当前用户进程打开的文件数限制。HTTP配置http{##文件扩展名与文件类型映射表includemime.types;##默认文件类型default_typeapplication/octet-stream;##日志格式设定#log_formatmain'$remote_addr-$remote_user[$time_local]"$request"'#'$status$body_bytes_sent"$http_referer"'#'"$http_user_agent""$http_x_forwarded_for"';##访问日志位置#access_loglogs/access.logmain;##支持文件发送(下载)sendfileon;##此选项允许或禁止使用socket的TCP_CORK的选项(发送数据包前下缓存数据),此选项仅在使用sendfile的时候使用#tcp_nopushon;##连接保持的最大时间,单位为秒#keepalive_timeout0;keepalive_timeout65;##gzip模块设置,设置是否再起gzip压缩输出#gzipon;##web服务的监听配置server{##监听地址及端口listen80;##站点域名,可以有多个,用空格隔开server_namelocalhost;##网页的默认字符集,可修改为万国字符集utf-8#charsetkoi8-r;#access_loglogs/host.access.logmain;##根目录配置location/{##网站根目录位置默认为/usr/local/nginx/htmlroothtml;##默认首页文件名indexindex.htmlindex.htm;}#error_page404/404.html;#redirectservererrorpagestothestaticpage/50x.html###内部错误的反馈页面error_page500502503504/50x.html;##错误页面配置location=/50x.html{roothtml;}#proxythePHPscriptstoApachelisteningon127.0.0.1:80##location~\.php${#proxy_passhttp://127.0.0.1;#}#passthePHPscriptstoFastCGIserverlisteningon127.0.0.1:9000##location~\.php${#roothtml;#fastcgi_pass127.0.0.1:9000;#fastcgi_indexindex.php;#fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name;#includefastcgi_params;#}#denyaccessto.htaccessfiles,ifApache'sdocumentroot#concurswithnginx'sone##location~/\.ht{#denyall;#}}1)日志格式设定$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;$remote_user:用来记录客户端用户名称;$time_out:用来记录访问时间与时区;$request:用来记录请求的url与http协议;$status:用来记录请求状态,成功是200;$body_bytes_sent:记录发送给客户端文件主体内容大小;$http_referer:用来记录从哪个页面链接访问过来;$http_user_agent:记录客户浏览器的相关信息;通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。2)location的配置location常见配置指令root、alias、proxy_passroot为根路径配置alias为别名设置proxy_pass为反向代理配置2.访问状态统计配置先使用命令“/usr/local/nginx/sbin/nginx-V”查看已安装的nginx是否包含“HTTP_STUB_STATUS”模块修改nginx.conf配置文件,指定访问位置并添加stub_status配置vim/usr/local/nginx/conf/nginx.conf......server{listen80;server_namewww.test.com;charsetutf-8;#access_loglogs/host.access.logmain;location/{roothtml;indexindex.htmlindex.htm;}location/status{stub_statuson;access_logoff;}}......重启服务,访问测试[root@localhostconf]#systemctlrestartnginx[root@localhostconf]#echo"192.168.122.10www.test.com">>/etc/hostsActiveconnections:1#当前的活动链接数serveracceptshandledrequests#已经处理的连接信息111#已处理的连接数、成功的TCP握手次数、已处理的请求数Reading:0Writing:1Waiting:0#正在读、写以及等待的连接数可使用“curlwww.test.com/status”结合awk与if语句进行性能监控[root@localhostopt]#catconnect.sh#!/bin/bashcurl-swww.test.com/status>active.txtconnect=$(awk'/Active/{print$3}'active.txt)if[$connect-ge1];thenecho"当前链接数为$connect,链接数过高,请注意!"fi[root@localhostopt]#./connect.sh当前链接数为1,链接数过高,请注意!3.基于授权的访问控制生成用户密码认证文件[root@localhostopt]#yuminstall-yhttpd-tools[root@localhostopt]#htpasswd-c/usr/local/nginx/passwd.db123Newpassword:Re-typenewpassword:Addingpasswordforuser123[root@localhostopt]#chownnginx/usr/local/nginx/passwd.db[root@localhostopt]#chmod400/usr/local/nginx/passwd.db修改主配置文件相对应目录,添加认证配置项vim/usr/local/nginx/conf/nginx.conf......location/{roothtml;indexindex.htmlindex.htm;##添加认证配置auth_basic"secret";##设置密码提示框文字信息auth_basic_user_file/usr/local/nginx/passwd.db;}......重启服务,访问测试[root@localhostopt]#nginx-tnginx:theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisoknginx:configurationfile/usr/local/nginx/conf/nginx.conftestissuccessful[root@localhostopt]#systemctlrestartnginx4.基于客户端的访问控制访问控制规则如下:denyIP/IP段:拒绝某个IP或IP段的客户端访问;allowIP/IP段:允许某个IP或IP段的客户端访问。规则从上往下执行,若匹配则停止,不再往下匹配······location/{roothtml;indexindex.htmlindex.htm;auth_basic"secret";auth_basic_user_file/usr/local/nginx/passwd.db;deny192.168.122.10;allowall;}······四、nginx虚拟主机1.基于域名的nginx虚拟主机为虚拟主机提供域名解析[root@localhostconf]#echo"192.168.122.10www.test.comwww.abc.com">>/etc/hosts为虚拟主机准备网页文档[root@localhostlogs]#mkdir-p/var/www/html/test[root@localhostlogs]#mkdir-p/var/www/html/abc[root@localhostlogs]#echo"<h1>www.test.com</h1>">/var/www/html/test/index.html[root@localhostlogs]#echo"<h1>www.abc.com</h1>">/var/www/html/abc/index.html修改nginx的配置文件......server{listen80;server_namewww.test.com;charsetutf-8;access_loglogs/test.access.log;location/{root/var/www/html/test;indexindex.htmlindex.htm;}}server{listen80;server_namewww.abc.com;charsetutf-8;access_loglogs/abc.access.log;location/{root/var/www/html/abc;indexindex.htmlindex.htm;}}......重启服务,访问测试[root@localhostlogs]#nginx-tnginx:theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisoknginx:configurationfile/usr/local/nginx/conf/nginx.conftestissuccessful[root@localhostlogs]#systemctlrestartnginx2.基于IP的nginx虚拟主机添加网卡[root@localhostlogs]#ifconfigens33:0192.168.122.11netmask255.255.255.0[root@localhostlogs]#ifconfigens33:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet192.168.122.10netmask255.255.255.0broadcast192.168.122.255inet6fe80::7350:3abe:ece6:290dprefixlen64scopeid0x20<link>ether00:0c:29:59:be:betxqueuelen1000(Ethernet)RXpackets615077bytes887122536(846.0MiB)RXerrors0dropped0overruns0frame0TXpackets69849bytes5350698(5.1MiB)TXerrors0dropped0overruns0carrier0collisions0ens33:0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet192.168.122.11netmask255.255.255.0broadcast192.168.122.255ether00:0c:29:59:be:betxqueuelen1000(Ethernet)修改nginx的配置文件......server{listen192.168.122.10:80;server_namewww.test.com;charsetutf-8;access_loglogs/test.access.log;location/{root/var/www/html/test;indexindex.htmlindex.htm;}}server{listen192.168.122.11:80;server_namewww.abc.com;charsetutf-8;access_loglogs/abc.access.log;location/{root/var/www/html/abc;indexindex.htmlindex.htm;}}......重启服务,访问测试[root@localhostlogs]#nginx-tnginx:theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisoknginx:configurationfile/usr/local/nginx/conf/nginx.conftestissuccessful[root@localhostlogs]#systemctlrestartnginx3.基于端口的nginx寻主机修改nginx的配置文件......server{listen192.168.122.10:80;server_namewww.test.com;charsetutf-8;access_loglogs/test.access.log;location/{root/var/www/html/test;indexindex.htmlindex.htm;}}server{listen192.168.122.10:8888;server_namewww.abc.com;charsetutf-8;access_loglogs/abc.access.log;location/{root/var/www/html/abc;indexindex.htmlindex.htm;}}......重启服务,访问测试[root@localhostlogs]#nginx-tnginx:theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisoknginx:configurationfile/usr/local/nginx/conf/nginx.conftestissuccessful[root@localhostlogs]#systemctlrestartnginx总结Nginx这里很重要,及时阅读,收获更快

架构 358 2月前
nginx网站服务
zyw327

nginx网站服务

目录一、nginx服务基础1.nginx概述2.nginx和apache的差异二、编译安装nginx1.关闭防火墙,将安装nginx软件包传到/opt目录下2.安装依赖包3.创建运行用户、组4.编译安装nginx5.检查、启动、重启、停止nginx服务三、nginx访问控制1.认识ngnix服务的主配置文件nginx.conf2.访问状态统计配置3.基于授权的访问控制4.基于客户端的访问控制四、nginx虚拟主机1.基于域名的nginx虚拟主机2.基于IP的nginx虚拟主机3.基于端口的nginx寻主机总结一、nginx服务基础1.nginx概述nginx是一款高性能、轻量级的web服务软件,具有以下特点:稳定性高系统资源消耗低对HTTP并发连接的处理能力高(单台物理服务器可支持30000~50000个并发请求)2.nginx和apache的差异nginx是一个基于事件的web服务器,apache是一个基于流程的服务器;nginx所有请求都由一个线程处理,apache单个线程处理单个请求;nginx避免子进程的概念,apache是基于子进程的;nginx在内存消耗和连接方面更好,apache在内存消耗和连接方面一般;nginx的性能和可伸缩性不依赖于硬件,apache依赖于CPU和内存等硬件;nginx支持热部署,apache不支持热部署;nginx对于静态文件处理具有更高效率,apache相对一般;nginx在反向代理场景具有明显优势,apache相对一般。二、编译安装nginx1.关闭防火墙,将安装nginx软件包传到/opt目录下[root@localhost~]#systemctlstopfirewalld[root@localhost~]#systemctldisablefirewalld[root@localhost~]#setenforce0setenforce:SELinuxisdisabled[root@localhostopt]#cd/opt[root@localhostopt]#lsnginx-1.12.0.tar.gznginx-1.12.2.tar.gzrh2.安装依赖包ngnix的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。[root@localhostopt]#yuminstall-ypcre-develzlib-develgccgcc-c++make3.创建运行用户、组nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限[root@localhostnginx-1.12.0]#useradd-M-s/sbin/nologinnginx4.编译安装nginx[root@localhostopt]#tarzxvfnginx-1.12.0.tar.gz-C/opt/[root@localhostopt]#cdnginx-1.12.0/[root@localhostnginx-1.12.0]#./configure\>--prefix=/usr/local/nginx\#指定nginx的安装路径>--user=nginx\#指定用户名>--group=nginx\#指定组名>--with-http_stub_status_module#启用http_stub_status_module模块以支持状态统计[root@localhostnginx-1.12.0]#make-j2&&makeinstall#编译并安装[root@localhostnginx-1.12.0]#ln-s/usr/local/nginx/sbin/nginx/usr/local/sbin#让系统识别nginx的操作命令5.检查、启动、重启、停止nginx服务检查[root@localhostnginx-1.12.0]#nginx-t#检查配置文件是否配置正确nginx:theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisoknginx:configurationfile/usr/local/nginx/conf/nginx.conftestissuccessful启动[root@localhostnginx-1.12.0]#nginx#启动nginx看nginx进程号的几种方法方法一:catnginx.pid文件方法二:prepnginx方法三:lsof-i:端口号方法四:psaux/-elf|grepnginx方法五:netstat/ss-natp|grepnginx[root@localhostnginx-1.12.0]#cat/usr/local/nginx/logs/nginx.pid11212[root@localhostnginx-1.12.0]#pgrepnginx1121211213[root@localhostnginx-1.12.0]#lsof-i:80COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAMEnginx11212root6uIPv41110570t0TCP*:http(LISTEN)nginx11213nginx6uIPv41110570t0TCP*:http(LISTEN)[root@localhostnginx-1.12.0]#psaux|grepnginxroot112120.00.020496604?Ss04:550:00nginx:masterprocessnginxnginx112130.00.0230241384?S04:550:00nginx:workerprocessroot112530.00.0112676976pts/1R+04:590:00grep--color=autonginx[root@localhostnginx-1.12.0]#ps-elf|grepnginx1Sroot1121210800-5124sigsus04:55?00:00:00nginx:masterprocessnginx5Snginx11213112120800-5756ep_pol04:55?00:00:00nginx:workerprocess0Rroot1126422110800-28169-05:00pts/100:00:00grep--color=autonginx[root@localhostnginx-1.12.0]#ss-natp|grepnginxLISTEN0128*:80*:*users:(("nginx",pid=11213,fd=6),("nginx",pid=11212,fd=6))[root@localhostnginx-1.12.0]#netstat-natp|grepnginxtcp000.0.0.0:800.0.0.0:*LISTEN11212/nginx:master停止nginx的几种方法方法一:kill-3进程号方法二:kill-sQUIT进程号方法三:killall-3nginx方法四:killall-sQUITnginx[root@localhostnginx-1.12.0]#kill-311212[root@localhostnginx-1.12.0]#nginx[root@localhostnginx-1.12.0]#cat/usr/local/nginx/logs/nginx.pid11337[root@localhostnginx-1.12.0]#kill-sQUIT11337[root@localhostnginx-1.12.0]#nginx[root@localhostnginx-1.12.0]#killall-3nginx[root@localhostnginx-1.12.0]#nginx[root@localhostnginx-1.12.0]#killall-sQUITnginx重载nginx的集中方法方法一:kill-1进程号方法二:kill-sHUP进程号方法三:killall-1nginx方法四:killall-sHUPnginx[root@localhostnginx-1.12.0]#nginx[root@localhostnginx-1.12.0]#cat/usr/local/nginx/logs/nginx.pid11427[root@localhostnginx-1.12.0]#kill-111427[root@localhostnginx-1.12.0]#cat/usr/local/nginx/logs/nginx.pid11427[root@localhostnginx-1.12.0]#kill-sHUP11427[root@localhostnginx-1.12.0]#killall-1nginx[root@localhostnginx-1.12.0]#killall-sHUPnginx日志分割,重新打开日志文件[root@localhostnginx-1.12.0]#cat/usr/local/nginx/logs/nginx.pid11427[root@localhostnginx-1.12.0]#kill-USR111427平滑升级[root@localhostnginx-1.12.0]#cat/usr/local/nginx/logs/nginx.pid11427[root@localhostnginx-1.12.0]#kill-USR211427版本升级[root@localhostopt]#tar-zxvfnginx-1.12.2.tar.gz[root@localhostnginx-1.12.2]#./configure\>--prefix=/usr/local/nginx\>--user=nginx\>--group=nginx\>--with-http_stub_status_module\>--with-http_ssl_module[root@localhostnginx-1.12.2]#make[root@localhostnginx-1.12.2]#mv/usr/local/nginx/sbin/nginx/usr/local/nginx/sbin/nginx_old[root@localhostnginx-1.12.2]#cpobjs/nginx/usr/local/nginx/sbin/nginx[root@localhostnginx-1.12.2]#makeupgrade#也可先killallnginx,再/usr/local/nginx/sbin/nginx[root@localhostnginx-1.12.2]#nginx-vnginxversion:nginx/1.12.2添加nginx系统服务方法一[root@localhostnginx-1.12.2]#cat/etc/init.d/nginx#!/bin/bash#chkconfig:-9920#description:NginxServiceControlScriptCOM="/usr/local/nginx/sbin/nginx"PID="/usr/local/nginx/logs/nginx.pid"case"$1"instart)$COM;;stop)kill-sQUIT$(cat$PID);;restart)$0stop$0start;;reload)kill-sHUP$(cat$PID);;*)echo"Usage:$0{start|stop|restart|reload}"exit1esacexit0[root@localhostnginx-1.12.2]#chmod+x/etc/init.d/nginx[root@localhostnginx-1.12.2]#chkconfig--addnginx#添加为系统服务[root@localhostnginx-1.12.2]#systemctlstopnginx[root@localhostnginx-1.12.2]#systemctlstartnginx方法二[root@localhostnginx-1.12.2]#chmod754/lib/systemd/system/nginx.service[root@localhostnginx-1.12.2]#cat/lib/systemd/system/nginx.service[Unit]#服务的说明Description=nginx#描述服务After=network.target#依赖,当依赖的服务启动之后再启动自定义的服务[Service]#服务运行参数的设置Type=forking#forking是后台运行的形式,使用此启动类型应同时指定PIDFile=,以便systemd能够跟踪服务的主进程。PIDFile=/usr/local/nginx/logs/nginx.pid#进程号文件的查看路径ExecStart=/usr/local/nginx/sbin/nginx#服务的具体运行命令ExecReload=/bin/klll-sHUP$MAINPID#重载命令ExecStop=/bin/kill-sQUIT$MAINPID#停止命令PrivateTmp=true#表示给服务分配独立的临时空间[Install]#服务安装的相关设置,可设置为多用户WantedBy=multi-user.target[root@localhostnginx-1.12.2]#systemctlstopnginx.service[root@localhostnginx-1.12.2]#systemctlstartnginx.service[root@localhostnginx-1.12.2]#systemctlenablenginx.serviceCreatedsymlinkfrom/etc/systemd/system/multi-user.target.wants/nginx.serviceto/usr/lib/systemd/system/nginx.service.注:启动、重启、停止等命令全部要求使用绝对路径三、nginx访问控制1.认识ngnix服务的主配置文件nginx.confvim/usr/local/nginx/conf/nginx.conf全局配置#usernobody;#运行用户,若编译时未指定则默认为nobodyworker_process1;#工作进程数量,可配置成服务器内核数*2,如果网站访问量不大,一般设为1就够用了#error_loglogs/error.log;#错误日志文件的位置#pidlogs/nginx.pid;#PID文件的位置I/O事件配置events{useepoll;#使用epoll模型,2.6及以上版本的系统内核,加你使用epoll模型以提高性能worker_connections1024;#每个进程处理1024个连接}若提高每个进程的链接数还需执行"ulimit-n65535"命令临时修改本地每个进程可以同时打开的最大文件数。在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用"ulimit-a"命令查看系统允许当前用户进程打开的文件数限制。HTTP配置http{##文件扩展名与文件类型映射表includemime.types;##默认文件类型default_typeapplication/octet-stream;##日志格式设定#log_formatmain'$remote_addr-$remote_user[$time_local]"$request"'#'$status$body_bytes_sent"$http_referer"'#'"$http_user_agent""$http_x_forwarded_for"';##访问日志位置#access_loglogs/access.logmain;##支持文件发送(下载)sendfileon;##此选项允许或禁止使用socket的TCP_CORK的选项(发送数据包前下缓存数据),此选项仅在使用sendfile的时候使用#tcp_nopushon;##连接保持的最大时间,单位为秒#keepalive_timeout0;keepalive_timeout65;##gzip模块设置,设置是否再起gzip压缩输出#gzipon;##web服务的监听配置server{##监听地址及端口listen80;##站点域名,可以有多个,用空格隔开server_namelocalhost;##网页的默认字符集,可修改为万国字符集utf-8#charsetkoi8-r;#access_loglogs/host.access.logmain;##根目录配置location/{##网站根目录位置默认为/usr/local/nginx/htmlroothtml;##默认首页文件名indexindex.htmlindex.htm;}#error_page404/404.html;#redirectservererrorpagestothestaticpage/50x.html###内部错误的反馈页面error_page500502503504/50x.html;##错误页面配置location=/50x.html{roothtml;}#proxythePHPscriptstoApachelisteningon127.0.0.1:80##location~\.php${#proxy_passhttp://127.0.0.1;#}#passthePHPscriptstoFastCGIserverlisteningon127.0.0.1:9000##location~\.php${#roothtml;#fastcgi_pass127.0.0.1:9000;#fastcgi_indexindex.php;#fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name;#includefastcgi_params;#}#denyaccessto.htaccessfiles,ifApache'sdocumentroot#concurswithnginx'sone##location~/\.ht{#denyall;#}}1)日志格式设定$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;$remote_user:用来记录客户端用户名称;$time_out:用来记录访问时间与时区;$request:用来记录请求的url与http协议;$status:用来记录请求状态,成功是200;$body_bytes_sent:记录发送给客户端文件主体内容大小;$http_referer:用来记录从哪个页面链接访问过来;$http_user_agent:记录客户浏览器的相关信息;通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。2)location的配置location常见配置指令root、alias、proxy_passroot为根路径配置alias为别名设置proxy_pass为反向代理配置2.访问状态统计配置先使用命令“/usr/local/nginx/sbin/nginx-V”查看已安装的nginx是否包含“HTTP_STUB_STATUS”模块修改nginx.conf配置文件,指定访问位置并添加stub_status配置vim/usr/local/nginx/conf/nginx.conf......server{listen80;server_namewww.test.com;charsetutf-8;#access_loglogs/host.access.logmain;location/{roothtml;indexindex.htmlindex.htm;}location/status{stub_statuson;access_logoff;}}......重启服务,访问测试[root@localhostconf]#systemctlrestartnginx[root@localhostconf]#echo"192.168.122.10www.test.com">>/etc/hostsActiveconnections:1#当前的活动链接数serveracceptshandledrequests#已经处理的连接信息111#已处理的连接数、成功的TCP握手次数、已处理的请求数Reading:0Writing:1Waiting:0#正在读、写以及等待的连接数可使用“curlwww.test.com/status”结合awk与if语句进行性能监控[root@localhostopt]#catconnect.sh#!/bin/bashcurl-swww.test.com/status>active.txtconnect=$(awk'/Active/{print$3}'active.txt)if[$connect-ge1];thenecho"当前链接数为$connect,链接数过高,请注意!"fi[root@localhostopt]#./connect.sh当前链接数为1,链接数过高,请注意!3.基于授权的访问控制生成用户密码认证文件[root@localhostopt]#yuminstall-yhttpd-tools[root@localhostopt]#htpasswd-c/usr/local/nginx/passwd.db123Newpassword:Re-typenewpassword:Addingpasswordforuser123[root@localhostopt]#chownnginx/usr/local/nginx/passwd.db[root@localhostopt]#chmod400/usr/local/nginx/passwd.db修改主配置文件相对应目录,添加认证配置项vim/usr/local/nginx/conf/nginx.conf......location/{roothtml;indexindex.htmlindex.htm;##添加认证配置auth_basic"secret";##设置密码提示框文字信息auth_basic_user_file/usr/local/nginx/passwd.db;}......重启服务,访问测试[root@localhostopt]#nginx-tnginx:theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisoknginx:configurationfile/usr/local/nginx/conf/nginx.conftestissuccessful[root@localhostopt]#systemctlrestartnginx4.基于客户端的访问控制访问控制规则如下:denyIP/IP段:拒绝某个IP或IP段的客户端访问;allowIP/IP段:允许某个IP或IP段的客户端访问。规则从上往下执行,若匹配则停止,不再往下匹配······location/{roothtml;indexindex.htmlindex.htm;auth_basic"secret";auth_basic_user_file/usr/local/nginx/passwd.db;deny192.168.122.10;allowall;}······四、nginx虚拟主机1.基于域名的nginx虚拟主机为虚拟主机提供域名解析[root@localhostconf]#echo"192.168.122.10www.test.comwww.abc.com">>/etc/hosts为虚拟主机准备网页文档[root@localhostlogs]#mkdir-p/var/www/html/test[root@localhostlogs]#mkdir-p/var/www/html/abc[root@localhostlogs]#echo"<h1>www.test.com</h1>">/var/www/html/test/index.html[root@localhostlogs]#echo"<h1>www.abc.com</h1>">/var/www/html/abc/index.html修改nginx的配置文件......server{listen80;server_namewww.test.com;charsetutf-8;access_loglogs/test.access.log;location/{root/var/www/html/test;indexindex.htmlindex.htm;}}server{listen80;server_namewww.abc.com;charsetutf-8;access_loglogs/abc.access.log;location/{root/var/www/html/abc;indexindex.htmlindex.htm;}}......重启服务,访问测试[root@localhostlogs]#nginx-tnginx:theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisoknginx:configurationfile/usr/local/nginx/conf/nginx.conftestissuccessful[root@localhostlogs]#systemctlrestartnginx2.基于IP的nginx虚拟主机添加网卡[root@localhostlogs]#ifconfigens33:0192.168.122.11netmask255.255.255.0[root@localhostlogs]#ifconfigens33:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet192.168.122.10netmask255.255.255.0broadcast192.168.122.255inet6fe80::7350:3abe:ece6:290dprefixlen64scopeid0x20<link>ether00:0c:29:59:be:betxqueuelen1000(Ethernet)RXpackets615077bytes887122536(846.0MiB)RXerrors0dropped0overruns0frame0TXpackets69849bytes5350698(5.1MiB)TXerrors0dropped0overruns0carrier0collisions0ens33:0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet192.168.122.11netmask255.255.255.0broadcast192.168.122.255ether00:0c:29:59:be:betxqueuelen1000(Ethernet)修改nginx的配置文件......server{listen192.168.122.10:80;server_namewww.test.com;charsetutf-8;access_loglogs/test.access.log;location/{root/var/www/html/test;indexindex.htmlindex.htm;}}server{listen192.168.122.11:80;server_namewww.abc.com;charsetutf-8;access_loglogs/abc.access.log;location/{root/var/www/html/abc;indexindex.htmlindex.htm;}}......重启服务,访问测试[root@localhostlogs]#nginx-tnginx:theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisoknginx:configurationfile/usr/local/nginx/conf/nginx.conftestissuccessful[root@localhostlogs]#systemctlrestartnginx3.基于端口的nginx寻主机修改nginx的配置文件......server{listen192.168.122.10:80;server_namewww.test.com;charsetutf-8;access_loglogs/test.access.log;location/{root/var/www/html/test;indexindex.htmlindex.htm;}}server{listen192.168.122.10:8888;server_namewww.abc.com;charsetutf-8;access_loglogs/abc.access.log;location/{root/var/www/html/abc;indexindex.htmlindex.htm;}}......重启服务,访问测试[root@localhostlogs]#nginx-tnginx:theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisoknginx:configurationfile/usr/local/nginx/conf/nginx.conftestissuccessful[root@localhostlogs]#systemctlrestartnginx总结Nginx这里很重要,及时阅读,收获更快

架构 348 2月前
全民上云,云服务器的优势体现在哪些方面?
zyw327

全民上云,云服务器的优势体现在哪些方面?

逃脱了固有的数据存储问题,现在很多企业都在选择云服务。同样,企业的云服务需要云服务器支持。但是云服务器是什么?云服务器的概念和我们传统的物理服务器概念有什么出入呢?在我们正式理解云服务器的概念之前,让我们重新认识物理服务器。在云服务器没有广泛进入大家的视野之前,物理服务器占据了市场的主流。物理服务器是我们所说的传统机柜服务器。最初,相关企业正在建造自己的机房,不选择idc数据中心进行托管。而自建机房耗时耗力,并不可取。因此,云服务器成为企业的第二选择。云服务器,我们可以把它想象成虚拟的云,就是能够看到但是却摸不到。提供云服务的制造商很多,他们是云服务提供商。云服务器是这些云服务提供商在物理服务器上虚拟的服务器。当然,使用云服务器和物理服务器没什么区别。与物理服务器相比,云服务器的最大优点是稳定、方便、安全。可以进行灵活部署。提供安全性高、稳定性高的机房!因此,云服务器实际上是租用大型云服务提供商的服务器,而不是将服务器转移到自己的办公室。云服务器可以在包括游戏、移动APP、研发测试、网站运营、数据库、管理系统等领域进行使用。云服务器能自动提供高弹性伸缩的负载,将流量自由分配到每一台服务器上,保证网站的正常运行。阿里云-云小站:https://www.aliyun.com/minisite/goods而云服务器的好处在企业上体现在哪几个方面?第一,更安全。大型云服务提供商在服务器安全方面更可靠。许多人不认为这种安全。然而,对于大型企业来说,企业中的数据和信息安全非常重要。一次性物理服务器故障会给公司带来巨大损失。而大型云服务商提供的云服务器都有专业的idc数据中心运维人员专业的人员维护,避免问题的发生。第二,业务配置更快。与传统的物理服务器配置半个月以上时间相比,云服务器配置更快、更方便,收费更有效。而且,这里的云服务器更加灵活,之后公司扩大,可以自由增加云服务器,之后业务减少的话,服务器的租赁就会减少。第三,使用成本更低。放置在企业办公场所的物理服务器,从采购到部署,需要消耗大量的人力、物力和资金,综合成本更高。而云服务器其实按照需求进行选择分配,能够节约较大的成本。而且云服务器可以远程部署进行管理,免去了数据中心运维人员投入费用。因此,在对比下云服务器的优势立竿见影,因此会受多越来越多的企业和个人的青睐。

架构 359 2月前
浏览器的几种防护策略
zyw327

浏览器的几种防护策略

前言近年来人们发现浏览器才是互联网最大的入口,绝大数用户使用互联网工具是浏览器,因此浏览器如果具备安全功能,将很好的保护用户上网。一、同源策略1、什么是同源策略同源策略(SameOriginPolicy)是一种约定,他是浏览器最核心也是最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能受到影响,可以说web的构建实在同源策略的基础之上的,浏览器只是针对同源策略的一种实现表示。浏览器的同源策略,限制了来自不同源的文件或脚本,对当前的文件读取或者设置某些属性。如果没有同源策略,假设a.com有一段javascript脚本,在b.com未曾加载此脚本时,a.com可以随意修改b.com的页面(在浏览器的显示中)。为了不让浏览器的页面行为发生混乱,浏览器提出“Origin”(源)这的概念,来自不同源的对象无法互相干扰。对于js来说,认为同源不同源的实列:url结果原因http://stroe.shen.com/dir2/index.html同源http://stroe.shen.com/dir/inner/admin.html同源https://stroe.shen.com/test2.html不同源不同的协议http://stroe.shen.com:81/dir/inner/admin.html不同源不同的端口http://new.shen.com/dir/inner/admin.html不同源不同的主机影响源的因素有:域名、IP地址、子域名、端口、协议【一>所有资源获取<一】1、200份很多已经买不到的绝版电子书2、30G安全大厂内部的视频资料3、100份src文档4、常见安全面试题5、ctf大赛经典题目解析6、全套工具包注意:对于当前页面来说,页面中存放js文件的域并不重要,重要的时加载js页面的域时什么。简单来说,1.com通过以下代码:<scriptsrc=http://2.com/2.js></script>加载了2.com上的2.js,但是2.js是运行在1.com页面中的,因此对于当前打开的页面(1.com)来说。2.js的源就是应该是1.com。2、XMLHttpRequest同源策略XMLHttpRequest对象提供了对HTTP协议的完全的访问,包括做出POST和HEAD请求以及普通的GET请求的能力。XMLHttpRequest可以同步或异步地返回Web服务器的响应,并且能够以文本或者一个DOM文档的形式返回内容。原理在浏览器中而对于XMLHttpRequest来说,它可以访问来自同源对象的内容。但不能跨域访问资源。后来w3c委员会制定XMLHttpRequest跨域访问标准。需要通过目标域返回的HTTP头来授权是否允许跨域访问,因为http头对于js来说一般时无法控制的。这个跨域方案的安全基础就是信任”js无法控制http头“。Origin字段用来说明,本次请求来自哪个源(协议+域名+端口)。服务器根据这个值,决定是否同意这次请求。Access-Control-Allow-Origin它的值要么是请求时Origin字段的值,要么是一个*,表示接受任意域名的请求。3、Flash插件同源策略对于浏览器来说,除了DOM、Cookie、XMLHttpRequest会受到同源策略的限制,浏览器的一些第三方插件也可以有不紫的同源策略,常见的一些插件如Flash、javaApplet等。原理Flash它主要通过目标网站提供的crossdomain.xml文件判断是否允许当前源的Flash跨域访问目标资源。假设www.test.com的策略文件为例,当浏览器在任意其他域的页面加载了Flash后,如果对www.test.com发起访问,Flash会检查www.test.com上策略文件是否存在。如果文件存在,则检查发起的请求的域是否在许可范围内。<?xmlversion="1.0"?><cross-domain-policy><allow-access-fromdomain="*.test.com"/><allow-access-fromdomain="*.test.net"/><allow-access-fromdomain="*.test2.com"/><allow-access-fromdomain="*.test.cn"/><allow-access-fromdomain="*.test1.com"/></cross-domain-policy>在上面的策略文件中,只有在allow-access-from标签内的域的情况是被允许的。Flash9及其之后的版本,还通过MINE检查确定crossdomain.xml是否合法,比如查看服务器返回的http头的Content-Type是否是test/*、application/xml等。攻击者可以通过上传crossdomain.xml文件控制flash的行为,绕过同源策略,出了MIME检查外,Flash还会检查crossdomain.xml是否在根目录下,也使得一些上传文件的攻击失效。4、IE8的CSS跨域漏洞测试浏览器的同源策略也是可能存在问题了,我们可以通过绕过等方式,下面我们在测试一下IE8的CSS跨域漏洞A服务器部署http://192.168.163.131/a.html<body>{}body{font-family:yyyyyyyyyyyyyyybbbbbbbbbbbbbbb</body>B服务器部署http://192.168.163.132/b.html<style>@importurl("http://192.168.163.131/a.html");</style><script>setTimeout(function(){vara=document.body.currentStyle.fontFamily;alert(a);},2000);</script>使用IE8及以下版本浏览器访问http://192.168.163.132/b.html,测试我们看到弹出a.html中的内容,理论varx=document.body.currentStyle.fontFamily;可以把{}body{font-family:"之后的所有内容存到x中,再由alert弹出。前面我们提到等标签仅能加载资源,但是不能读写资源的内容,而这个漏洞能实现跨域读取页面内容。具体怎么利用就仁者见仁智者见智了。二、恶意网站拦截1、恶意网站拦截原理在网页中插入一段恶意代码,利用浏览器漏洞执行任意代码的攻击方式,被称为“挂马”。挂马攻击能够破坏浏览器的安全,在很多时候,挂马攻击实施时会在一个正常网页通过挂马网站:通常包含恶意的脚本如js或Flash,利用浏览器漏洞执行shellcode。诈骗钓鱼网站:模仿知名网站的相似页面来欺骗用户。目前浏览器推出的拦截恶意网站的功能大多时基于黑名单的方式,浏览器周期性从服务器获得一份最新的恶意网站黑名单,如果用户上网访问的网站在黑名单里,浏览器就会弹出一个告警界面。PhishTank是互联网免费提供恶意网站黑名单的组织之一。https://phishtank.org/index.php2、EVSSL证书简述EVSSL,也称EVSSL证书,英文全名为:ExtendedValidationSSLCertificate,就是全球领先的数字证书颁发机构和主流的浏览器开发商共同制定的一个新的SSL证书严格身份验证标准,增强型SSL证书(EVSSL)是最高级别的SSL数字证书。EVSSL最大的特色便是激活网站浏览器的栏位使其变成绿色,利用鲜明的标示告诉网友:这个网站正受到最严密的信息安全防护同时EVSSL证书遵循X509标准,并向前兼容普通证书,如果浏览器不支持EV模式,则把该证书当前普通证书,如果浏览器痔疮,则会在地址栏中特别标记。在IE浏览器中存在EV证书的效果:在IE浏览器中不存在EV证书的效果:我们可以通过绿色表现以对抗钓鱼网站。三、内容安全策略(CSP)1、内容安全策略(CSP)原理随着web风险逐步严重,缓解跨脚本攻击问题,浏览器引入了内容安全策略(CSP)的概念,简单来说:开发者明确告诉客户端(指定比较严格的策略和规则),那些外部资源可以加载和执行的,即使攻击者发现漏洞,但是他是没办法注入脚本的。开发人员可以使用这种工具以各种方式锁定其应用程序,降低内容注入漏洞(如跨站点脚本)的风险,并降低其应用程序执行的权限2、如何启用CSP通过HTTP头信息的Content-Security-Policy的字段Content-Security-Policy:policy其中policy的描述机器灵活。范例1:Content-Security-Policy:allow'self'*.qq.com浏览器信任来自qq.com及其子域下的内容。范例2:Content-Security-Policy:allow'self';img-src*;media-srcqq.com;script-srctest.com浏览器除了信任自身来源外,还可以加载任意域的图片、来自qq.com的媒体文件和来自test.com的脚本,其他的一律拒绝。四、总结浏览器是互联网的重要入口,在web安全事件层出不穷的现在,浏览器的安全更是重中之重,浏览器安全以同源策略为基础,加深理解同源策略才能把握住浏览器安全的本质,本章节我们详细介绍了同源策略的原理和内容安全策略(CSP)并对浏览器拦截恶意网站的原理进行分析。

架构 379 2月前
Githubwebhooks自动部署博客文章,使用总结【含视频】
zyw327

Githubwebhooks自动部署博客文章,使用总结【含视频】

作者:小傅哥博客:https://bugstack.cn原文:https://mp.weixin.qq.com/s/VtTHUfyiITNSoGy052jkXQ沉淀、分享、成长,让自己和他人都能有所收获!😄《云服务器学习》第7节:webhook自动化部署博客一、前言小傅哥,我搞了三台服务器,维护学校游戏社站点,我麻了!📧女粉来信:傅哥,我大二了,就编程学的还可以的那种大二女生😄。最近我不是天天看见一大堆人宣传服务器白皮袄吗,我就在11.1日也买了,还让宿舍的两个同学一起跟着买了,都买了三年。想着这样我们三个人就可以搭建和维护我们学校游戏社团的站点了,日常维护着学校的游戏比赛、宣传、通知,还能顺便就把我学的编程技术用上,一举多得嘛。本来还想,可以赶在EDGVSDK的时候上线秀一下呢,但是域名要备案好多天,只能鸽了。而且随着我们三个熬夜的折腾服务器、做站点网站、备案域名,真是遇到太多问题了,以前感觉课本学了就能起飞呢,现在全拉胯了。只能一遍学习傅哥的云服务器操作视频,一遍部署验证,真的学到了好多好多!再次感谢傅哥!那么现在问题来了,就是傅哥你的B站视频只有6节,我看完也跟着做了,但这回我遇到了新的问题,就是就是,我三个服务器,按照视频配置完Nginx负载以后,每次都要通过FTP把网站文件传到三个服务器上去,有时候还忘记一个。这咋弄呀,傅哥给想想办法嘛。📨傅哥回信:办法是有的,可以把你的网站代码设置私有仓库传到Github或者Gitee,这两个代码库都支持webhook简单说就是当你把代码push到代码库以后,代码库会调用你预先配置好的一个或者多个回调钩子,其实也就是调用你三个负载均衡的站点提供的URL,来通知你现在这个代码库有最新更新的代码,你可以在收到URL的调用通知以后,通过gitpull命令把最新上传的网站代码,拉取到服务器上。那么现在的效果就是,你把代码维护在GitHub以后,上传最新的网站内容以后,三个站点就可以自动部署了,简要流程如下:方案流程:在自己的网站站点中,提供webhooksURL访问地址,配置到Github/Gitee代码库的Settings->Webhooks在下文中会有详细介绍例如图中webhooks.php开发的内容就是在接收到调用的时候,获取入参以后开始执行gitpull操作shell_exec("gitpulloriginmain2>&1");webhooks配置完成以后,当我们再通过gitpush把本地代码推送到仓库(Github/Gitee)的时候,仓库就会调用全部的webhooks.php,把仓库(Github/Gitee)中的代码拉取到站点中,这样就完成了整个站点内容的更新。🤔傅哥,你说的我悟了,但需要你再手把手,操作下!二、环境说明【必须】使用Github、Gitee、Codechina维护网站代码,因为这些代码库可以支持配置webhooks【必须】Linux云服务器(公网IP);安装Git、安装Nginx、安装PHP、安装FTP【可选】使用宝塔运维面板,部署站点博客,操作起来会比较方便三、站点配置首先,我们使用Linux宝塔运维面板,添加一个博客站点,在添加之前需要在宝塔中安装Nginx、FTP、PHP模块,如果你对这里的操作比较陌生,可以先看小傅哥在B站录制好的云服务器学习视频,地址:https://space.bilibili.com/15637440/channel/seriesdetail?sid=479958PS:当然你也可以不使用宝塔,通过命令安装Nginx或者Apache服务器等所需要的软件也是可以的。1.环境安装安装Git需求:在站点接收到webhooks回调时,使用gitpull拉取网站代码,所以需要安装git命令:yum-yinstallgit验证:[root@CodeGuide~]#gitversiongitversion2.27.0安装Nginx、FTP需求:部署博客站点时会需要到Nginx服务器、FTP上传操作:可以直接在宝塔中使用软件商店进行安装配置PHP,允许exec脚本指令需求:由于我们使用的是PHP开发的webhook回调操作,所以这里需要安装PHP模块安装:直接在宝塔的软件商店中进行安装即可配置:安装完PHP模块以后,还需要对PHP的php.ini进行更改,删除disable_functions下的exec、shell_exec,这样才能在webhooks.php文件中,执行脚本命令。如图:2.站点配置环境安装完毕后,就可以添加一个网站的站点了,你的网站运行代码都需要上传到这个站点中,它提供了FTP操作以及宝塔运维面板中还有一个文件,可以在线修改站点内容。3.访问站点地址:http://39.96.73.167-你换成自己的访问IP即可描述:默认创建完站点,会在/www/wwwroot/39.96.73.167目录下有一个index.html此时你可以进行在线修改四、创建公钥SSH是Linux系统的登录工具,现在广泛用于服务器登录和各种加密通信。1.查看运行用户一般php运行使用的是www用户,我们可以通过ftp上传一个index.php到站点根目录下,之后进行访问站点,查看项目路径和用户目录。index.php中的代码如下<?phpheader('Content-type:text/html;charset=utf-8');ini_set("error_reporting","E_ALL&~E_NOTICE");echo"Hi,Webhooks!By小傅哥<br/>";echo'<br/>测试:输出项目路径和用户目录:<br/>';exec("cd~&&cd-&&cd-",$output);echo'<pre>';echoprint_r($output);echo'</pre>';如果你未对php.ini中的disable_functions={exec、shell_exec}删掉,那么执行这个php文件的中脚本指令会报错。访问站点项目路径:[0]=>/www/wwwroot/39.96.73.167用户目录:[1]=>/home/www-www就是这个用户目录,也就是我们需要为其创建ssh公钥的用户2.生成和配置公钥2.1开启www用户命令:vim/etc/passwd配置:把sbin/nologin为bin/bash2.2生成公钥因为我们已经开始了www登录权限,那么在生成公钥之前,需要切换到www账户下,命令:suwww切换用户:suwww生成公钥:ssh-keygen-trsa-C"184172133@qq.com"-默认回车即可查看公钥:cat~/.ssh/id_rsa.pub-其他账户下不可见,只有切换到www可见2.3配置公钥(Github)地址:https://github.com/settings/ssh/new配置:把你通过cat~/.ssh/id_rsa.pub查看到的公钥,配置到这里即可,如下:有了这个公钥的配置,我们通过webhooks.php中的脚本指令就可以自动的拉取代码了。五、webhooks更新博客1.克隆我的代码源码:关注公众号:bugstack虫洞栈-回复:guide-webhooks即可获得使用:你可以把我的源码先fork到自己的Github,然后部署到你的站点中。在学习完成搞清楚原理后,再处理你自己的站点2.部署到站点这里我们需要先在站点使用gitclone”你的网站代码git地址“,把Github代码克隆到自己的博客中,其实也就是启动了部署做的作用。而这步操作,其实就是日常使用Git的方式,先克隆代码,在不断gitpull更新。命令:[www@CodeGuide39.96.73.167]$gitclonegit@github.com:fuzhengwei/guide-webhooks.git-注意,你需要切换为自己的代码库地址,否则webhooks不能生效3.更改网站运行目录因为我们已经在博客站点中,从Github克隆下来我们的博客运行代码,那么这里需要把网站的运行目录切换到这个文件夹下,这样就能正常访问到我们的博客代码了。4.配置webhookswebhooks.php回调脚本<?php/***Gitwebhooks自动部署脚本*地址:https://github.com/fuzhengwei/guide-webhooks/settings/hooks*///接收post参数$requestBody=file_get_contents("php://input");if(empty($requestBody)){exit('datanull!');}//Contenttype=application/json$content=json_decode($requestBody,true);//验证Webhooks配置的Secret,也可以不验证/*if(empty($content['password'])||$content['password']!='123456'){exit('passworderror');}*///项目存放物理路径,也就是站点的访问地址$path="/www/wwwroot/39.96.73.167/guide-webhooks/";//判断需要下拉的分支上是否有提交,我们这里的分支名称为mainif($content['ref']=='refs/heads/main'){//执行脚本gitpull,拉取分支最新代码$res=shell_exec("cd{$path}&&gitpulloriginmain2>&1");//当前为www用户//记录日志($content返回的是一整个对象,可以按需获取里面的内容,写入日志)$res_log='------------------------->'.PHP_EOL;$res_log.='用户'.$content['pusher']['name'].'于'.date('Y-m-dH:i:s').'向项目【'.$content['repository']['name'].'】分支【'.$content['ref'].'】PUSH'.$content['commits'][0]['message'].PHP_EOL;$res_log.=$res.PHP_EOL;//追加方式,写入日志文件file_put_contents("git_webhook_log.txt",$res_log,FILE_APPEND);}echo'done';在我们从Github克隆下来的代码文件中,有一个名为webhooks.php的文件,它是用于处理Github回调时拉取Github对应博客代码库的脚本文件。现在http://39.96.73.167/webhooks.php就可以配置到Github的webhooks下了,如图:配置,URL、Contenttype、Secret、trigger,配置完成后确认即可,另外你可以把多个服务器实例都配置上webhooks,这样就可以在推送代码到Github仓库时一起部署了。六、部署验证目前,访问博客是这样,如下:接下来我们开始修改博客文件并提交,验证自动部署更新站点1.index.php新增代码你可以在index.php文件中修改任意内容,或者添加新的内容。2.push代码到Github推送新修改的内容,到代码库中,等待Githubwebhooks回调脚本3.验证博客更新地址:http://39.96.73.167/效果:通过访问博客地址,已经可以看到我们新加入的内容,已经自动部署更新到站点了!✌🏻4.查看脚本执行日志在我们的webhooks.php中,执行gitpull脚本的时候,还有一段日志记录,便于知晓谁对网站对了什么!git_webhook_log.txtgit_webhook_log.txt是在webhooks.php中记录的日志文件,你可以自行扩展其他需要输出的内容。5.查看webhooks推送日志每一次webhooks执行时,都会有对应的记录,来告诉你本次代码推送是否被回调成功。并且在日志中,你还可以看到webhooks向你推送的内容JSON文件内容,你可以从中获取需要的信息,比如这是谁推送的、在哪个分支推送的、推送的文件有哪些等等。这里也截取了一段推送的JSON,其余信息你可以在推送记录中自己查看了。七、总结本章节我们带着大家彻底的把webhooks的使用走了一遍,也让需要此技术的小伙伴可以让自己的站点部署变更的更加聪明一些。当然自己做记录也帮助了一些师弟和小姐姐!那么现在如果你手里有服务器正在吃灰不知道怎么用起来,现在可以折腾起来了,因为傅哥给你录好了入门视频、写好了操作文章,那么不要等待了,上吧!年轻人!课程链接:https://space.bilibili.com/15637440/channel/seriesdetail?sid=479958八、系列推荐《Netty+JavaFx实战:仿桌面版微信聊天》代码开源、上云部署、视频讲解,只为让你给点个Star!Cloudreve自建云盘实践,我说了没人能限得了我的容量和速度!一天建4个,小傅哥教你搭博客!小傅哥,一个有“副业”的码农!讲道理,只要你是一个爱折腾的程序员,毕业找工作真的不需要再花钱培训!

架构 382 2月前
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 >> 尾页 共 3240 页