[root@redhat7 ~]# wget http://am1.php.net/get/php-7.1.2.tar.gz/from/this/mirror
[root@redhat7 ~]# tar xzvf php-7.1.2.tar.gz
[root@redhat7 ~]# cd php-7.1.2/
[root@redhat7 ~]# ./configure --prefix=/usr/local/php --enable-fpm
[root@redhat7 php-7.1.2]# make&&make install
查看是否成功编译安装PHP
[root@redhat7 php-7.1.2]# php -v
PHP 7.1.2 (fpm-fcgi) (built: Apr 14 2017 20:21:53)
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
编译安装完成后PHP不具备配置文件php.ini,此时只需复制php.ini-proction到 /usr/local/lib/php.ini即可,php.ini文件一般在/usr/local/lib/和/etc目录下
[root@localhost php-7.1.2]# cp php.ini-proction /usr/local/lib/php.ini
[root@redhat7 php]# /usr/local/php/sbin/php-fpm
[14-Apr-2017 20:59:49] ERROR: failed to open configuration file '/usr/local/php/etc/php-fpm.conf': No such file or directory (2)
[14-Apr-2017 20:59:49] ERROR: failed to load configuration file '/usr/local/php/etc/php-fpm.conf'
[14-Apr-2017 20:59:49] ERROR: FPM initialization failed
启动php-fpm发现缺乏配置文件/usr/local/php/etc/php-fpm.conf
此时只需复制php-fpm的配置文件在安装php时提供的配置文件的模版/usr/local/php/etc/php-fpm.conf.default到相应/usr/local/php/etc/php-fpm.conf即可
[root@redhat7 etc]# /usr/local/php/sbin/php-fpm
[14-Apr-2017 21:14:32] WARNING: Nothing matches the include pattern '/usr/local/php/etc/php-fpm.d/﹡.conf' from /usr/local/php/etc/php-fpm.conf at line 125.
[14-Apr-2017 21:14:32] ERROR: No pool defined. at least one pool section must be specified in config file
[14-Apr-2017 21:14:32] ERROR: failed to post process the configuration
[14-Apr-2017 21:14:32] ERROR: FPM initialization failed
[root@redhat7 etc]# cp php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
[root@redhat7 etc]# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
[root@redhat7 etc]# /etc/init.d/php-fpm
[14-Apr-2017 21:23:02] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98)
[14-Apr-2017 21:23:02] ERROR: FPM initialization failed
[root@redhat7 etc]# netstat -nldp|grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3721/php-fpm: maste
[root@redhat7 php-7.1.2]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@redhat7 php-7.1.2]# chmod a+x /etc/init.d/php-fpm
[root@redhat7 php-7.1.2]# ll /etc/init.d/php-fpm
-rwxr-xr-x 1 root root 2401 4月 14 21:26 /etc/init.d/php-fpm
[root@redhat7 php-7.1.2]# /etc/init.d/php-fpm start
Starting php-fpm [14-Apr-2017 21:28:09] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98)
[14-Apr-2017 21:28:09] ERROR: FPM initialization failed
failed
[root@redhat7 php-7.1.2]# netstat -nldp |grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3721/php-fpm: maste
[root@redhat7 php-7.1.2]# kill 3721
[root@redhat7 php-7.1.2]# netstat -nldp |grep 9000
[root@redhat7 php-7.1.2]# /etc/init.d/php-fpm start
Starting php-fpm done
[root@redhat7 php-7.1.2]# service php-fpm status
php-fpm (pid 3927) is running...
[root@redhat7 php-7.1.2]# chkconfig --add php-fpm
[root@redhat7 php-7.1.2]# chkconfig php-fpm --level 345 on
配置nginx支持PHP
修改nginx的配置文件,支持php文件的解析,找到location的添加位置,在后面添加下面这个location
location ~ .php$ {
root /usr/share/nginx/html; #指定php的根目录
fastcgi_pass 127.0.0.1:9000;#php-fpm的默认端口是9000
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
‘贰’ Django部署——uwsgi+Nginx(超详细)
环境:
python3.6
centos 7
Django1.11
用Django写了个小网站,只能在自己本地跑一跑!这怎么行?听说可以部署在云服务器上,这样别人就可以访问了!
从哪儿开始?就从Django开始吧!老规矩,按步骤:
这里不讲Django项目实施过程,假设你已经写了一个Django项目,并且在本地 127.0.0.1:8000 能够跑起来。喏,给你个参考,项目大概长这样:
也就是项目目录下的settings.py文件,主要强调几个地方:
①关闭DEBUG模式:
②修改ALLOWED_HOSTS:
③配置静态文件存放路径:
修改好配置之后执行:
这个没什么说的。。。在自己的云服务器上装好这两个工具
安装好uwsgi后最好验证一下,验证方法:
创建一个test.py文件:
启动uwsgi服务器:
如果可以正常启动而不报错那就应该没问题,不放心的话再在终端验证一下:
在uwsgi.ini里进行如下配置:
找到nginx的配置文件夹,centos7的nginx配置文件在/etc/nginx下,该路径下有一个nginx.conf总配置文件,还有两个文件夹./conf.d、./default.d,我们将nginx.conf复制一份到conf.d文件夹下,命名为nginx.conf(或者项目名.conf)进行如下修改(根据中文注释进行相应配置即可):
进入uwsgi.ini文件夹下执行:
在终端执行:
参考资料:
刘江的博客
博客园
知乎问答
无名Blog
自强学堂Django教程
Django文档
empty_xl Blog
‘叁’ Docker 入门 (07) 部署nginx 并且映射本地配置文件
目标:
1. 利用docker部署一个nginx容器
2.为nginx 容器设置配置文件 , 并且映射到宿主机(本机)
操作步骤:
1.拉取nginx镜像,并尝试简单运行(忘记怎么操作请参考第五节)
2.在本地新增配置文件 , 为了后面映射容器使用 ,我习惯是放到 /etc/docker/nginx-config , 按你个人运顷习惯新增
3.进入config ,我们需要创建一个简单配置文件 , 这里就来个简单的吧
4.因为我稍后需要占用的是8080端口 , 请确认云服务器端是否开放
5. 万事俱备 , 尝试启动吧
6. 使用你的 服务器ip+8080端口访问测试 , 看到您的写的 index,html 内容, 代表启动成功!
7.具体映射位置 可以 使用 docker exec -it [容野丛器ID] /bin/bash 命令去参考对应映射文件 ,原理就应该明白了
结语:
通过本节的 nginx 映射本地配置文件 , 应旁脊陆该掌握对docker映射文件的基本使用了 , 希望大家都把自己的nginx跑起来吧
‘肆’ 云服务器上搭建nginx+php,服务器curl 127.0.0.1/index.php,可以访问成功,绑定域名无法访问
JavaScript Document
function show(str)
{
var str1="败扮游td"+str;
var str="show"+str;
for (var i=1; i<18; i++)
{
var obj = document.getElementById('show'缺碧 + i.toString());
if (obj) obj.style.display = 'none'察销;
}
document.getElementById(str).style.display="block";
}
‘伍’ 如何在服务器上部署网站nginx
这个nginx集成环境有独立的服务,可以开机运行,支持全部windows系统
PHPWAMP8.8.8.8n,这个环境的NGinx站点管理很强大,支持无限自定义
以下内容来自网络经验里面的介绍
小编发现最近PHPWAMP集成环境又更新了phpwamp8.8.8.8n版本
phpwamp8.8.8.8n一共集成了12个PHP版本和3个mysql版本,并且可以高度自定义,你可以定义任何版本,解压后差不多1个G的大小,压缩包确仅有几十M,解压即可使用,纯绿色很方便,集成了apache和nginx等,支持asp、php、net
大家知道Nginx官方的windows版本用着很不稳定,时不时就会挂掉,而且默认安装后也不像apache那样有服务可以开机启动,毕竟nginx最适合的还是在linux下,不过最近更新的这款phpwamp8.8.8.8n安装后是有服务的,该软件作者自己写了一个Nginx服务,能开机启动,而且还能给每个站点分配不一样的进程,也可以随意指定站点的php版本!最关键的是该服务启动的php-cgi进程,就算你手动用杀毒软件的任务管理器也关不掉!关掉后会自动恢复,而且网站服务依旧正常!!除非你自己点击软件界面上的卸载服务才会关闭,该保护功能可以对网站进程起到保护作用。
‘陆’ 使用Nginx搭建静态网站
开始建站了,暂时还没想要做些什么东西。
Anyway,先搞个云服务器吧,那要怎么搭建呢?先来个最简单的。
Nginx 配置文件目录一般在 /etc/nginx/ 下,打开 nginx.conf 文件可以看到配置:
当外网用户访问服务器 Web 服务由 Nginx 提供,Nginx 需要配置静态资源的路径信息才能通过 URL 正确访问到服务器上的静态资源。
当我们在服务器上安装并启动 Nginx 之后,就可宏枝以通过 http://<域名或IP> 访问我们的网页了。所以,在浏览器中输入 http://100.2.3.4 即可。
我们观察到浏览器的地址变成了 http://100.2.3.4/index.html ,这页面是安装 Nginx 的默认站点,可以在 /usr/share/nginx/html 目录下找到。在 nginx.conf 配置文件中,有一项 root /usr/share/nginx/html 的配置,意思是当外网访问服务器 跟目录 时,Nginx 会将资源指向 /usr/share/nginx/html 的站点。
但如果输入地址,无法打开(如下截图)。
以阿里云为例,需要在云服务器添加 “安全组规则” ,添加并保存,重新刷新页面就能打开了。
我习惯将前端静态资源滚绝兄放置到服务器的 /data/www 下,因此将配置修改为 root /data/www 。此时访问 http://100.2.3.4 会指向 /data/www/index.html (在不配置 location 的 index 情况下,Nginx 默认配置是 index.html )。
由于我使用的是 Mac 机器,因此可以直接在系统终端使用 scp 命令将本地文件上传到云服务器。
scp (secure )用于在 Linux 下进行远程拷贝文件的命令。大袭类似于 cp ,只不过 cp 只能在本机进行拷贝,不能跨服务器。 -r 表示递归复制整个目录。
需要注意一下,下面两种的区别:
其中 1️⃣ 得到的是 /data/www/dist ,而 2️⃣ 得到的是 /data/www 。前者表示将 dist 整个目录拷贝至 /data/www 下。后者是把 dist 目录下的所有子文件和子目录都拷贝至 /data/www 。
换句话说就是,前者配置 root 的路径应该是 /data/www/dist ,后者则为 /data/www 。
效果如下:
在浏览器中访问 http://100.2.3.4 即可看到我们配置的网页了。
最简单的 Nginx 部署静态网页就完了,其他的下次再讲...
The end.
‘柒’ nginx+uwsgi 和nginx+gunicorn区别、如何部署
大家是采用的何种部署方式?
第一种,高并发稳定一点
我在很多的博客中都看过有关 Flask 应用的部署,也有很多博主在开博后都记录了部署的教程,因为其中的坑可以说不少。一开始我在网上看到相比较与 Ubuntu , CentOS 因为更新少作为服务器的操作系统会更加稳定。所以在第一次购买云服务器时,我选择了 CentOS ,后来由于 CentOS 不同发行版的 Nginx 缘故,我又换成了 Ubuntu 的镜像
首先呢,我们先来了解下关于Web服务器与Web应用还有WSGI之间的联系
WSGI (Web Server Gateway Interface),翻译为 Python web 服务器网关接口,即 Python 的 Web 应用程序(如 Flask )和 Web 服务器(如 Nginx )之间的一种通信协议。也就是说,如果让你的 Web 应用在任何服务器上运行,就必须遵循这个协议。
那么实现 WSGI 协议的web服务器有哪些呢?就比如 uWSGI 与 gunicorn 。两者都可以作为Web服档世务器。可能你在许多地方看到的都是采用 Nginx + uWSGI (或 gunicorn )的部署方式。实际上,直接通过 uWSGI 或 gunicorn 直接部署也是可瞎蠢辩以让外网访问的,那你可能会说,那要 Nginx 何用?别急,那么接来下介绍另一个Web服务器—— Nginx
Nginx 作为一个高性能Web服务器,具有负载均衡、拦截静态请求、高并发...等等许多功能,你可能要问了,这些功能和使用 Nginx + WSGI 容器的部署方式有什么关系?
首先是负载均衡,如果你了解过 OSI模型 的话,其实负载均衡器就是该模型中4~7层交换机中的一种,它的作用是能够仅通过一个前端唯一的URL访问分发到后台的多个服务器,这对于并发量非常大的企业级Web站点非常有效。在实际应用中我们通常会让 Nginx 监听(绑定) 80 端口,通过多域名或者多个location分发到不同的后端应用。
其次是拦截静态请求,简单来说, Nginx 会拦截到静态请求(静态文件,如图片),并交给自己处理。而动态请求内容将会通过 WSGI 容器交给 Web 应用处理;
Nginx 还有其他很多的功能,这里便不一一介绍。那么前面说了,直接通过 uWSGI 或 gunicorn 也可以让外网访问到的,但是鉴于 Nginx 具有高性能、高并发、静态文件缓存、及以上两点、甚至还可以做到限流与访问控制,所以选择 Nginx 是很有必要的;
这里可以说明,如果你选择的架构是:Nginx + WSGI容器 + web应用,WSGI容器相当于一个中间件;如果选择的架构是uWSGI + web应用,WSGI容器则为一个web服务器
普遍的部署方式都是通过让 Nginx 绑定 80 端口,并接受客户端的请求将动态内容的请求反向代理给运行在本地端口的 uWSGI 或者 Gunicorn ,所以既可以通过 Nginx + uWSGI 也可以通过 Nginx + Gunicorn 来部署 Flask 应用,这篇教程中都将一一介绍这两种方法
当然采用不同的 WSGI 容器, Nginx 中的配置也会有所不同
我们现在虚拟环境下安装好 uWSGI :
安装完成之后我们在项目的目录下(即你实际创建的Flask项目目录,在本文所指的项目目录都假设为/www/demo)创建以 .ini 为扩展名的配置文件。在设置与 Nginx 交互的时候有两种方式:
第一种是通过配置网络地址,第二种是通过本地的 .socket 文件进行通信。需要注意的是,不同的交互方式下, Nginx 中的配置也会有所不同
如果采用的是第一种网络地址的方式,则将之前创建 uwsgi.ini 配置文件添加如下的配置内容:
这里的 wsgi-file 参数所指的 run.py 其实是启动文件,你也可以使用 manage.py 。不过我通常习惯创建一个这样的文件,可以直接运行该文件磨缺来启动项目:
保存好配置文件后,就可以通过如下的命令来启动应用了:
如果你采用的是第二种本地 socket 文件的方式,则添加如下的配置内容:
可以看到,其实与网络地址的配置方式只有 socket 参数的配置不同,在这里填写好路径名和文件名并启动 uWSGI 后,将会自动在改目录下生成 nginx_uwsgi.socket 文件,这个文件就是用来与 Nginx 交互的。
首先我们来通过 apt 安装 Nginx :
安装完成之后,我们 cd 到 /etc/nginx/ 的目录下(可能由于不同系统导致不同的Nginx发行版缘故,目录有所差别,在此只针对 Ubuntu 中的发行版的Nginx),可以看到 Nginx 的所有配置文件。
其中 nginx.conf 文件为主配置文件,可以用来修改其全局配置; sites-available 存放你的配置文件,但是在这里添加配置是不会应用到 Nginx 的配置当中,需要软连接到同目录下的 sites-enabled 当中。但是在我实际操作的过程中中,当我在 sites-available 修改好配置文件后,会自动更新到 sites-enabled 。如果没有的话,则需要像上述的操作那样,将修改好的配置文件 软链接 到 sites-enabled 当中
在上边说到,配置 uWSGI 有两种与 Nginx 交互的方式,那么选择不同的方式的话在 Nginx 的配置也会有所不同:
第一种:网络配置方式 :
这里的 proxy_set_header 设置的三个参数的作用都是能够直接获得到客户端的 IP ,如果你感兴趣可以参考: Nginx中proxy_set_header 理解
用 include uwsgi_params 导入 uWSGI 所引用的参数,通过 uwsgi_pass 反向代理给在 localhost:8001 运行的 uWSGI :
在每次完Nginx配置文件内容后,需要通过如下的命令来重启Nginx:
第二种:socket文件方式 :
与上边的配置内容大体相同,只是在配置 uwsgi_pass 不是反向代理给网络地址,而是通过 socket 文件进行交互,我们只需要指定之前设置的路径和文件名即可:
首先先在虚拟环境下安装 Gunicorn :
安装完成后,我们来创建以 .py 结尾的配置文件,这里我参考了Jiyuankai的 GitHub 关于 Gunicorn 的配置文件内容:
需要注意的是要在配置文件的同层目录下创建 log 文件,否则运行 gunicorn 将报错。添加完配置内容并保存为 gconfig.py 文件后,我们就也可以通过 gunicorn 来运行 Flask 应用了:
和 uWSGI 的任意一种配置方法类似,只是在 location 中的配置有所不同:
通过Gunicorn的Nginx配置中,我们只需要通过 proxy_pass 参数反向代理给运行在 http://localhost:5000/ 上的Gunicorn
如果你采取如上的任意一种部署方式,在Nginx与uWSGI或Gunicorn同时运行,并且配置无误的状态下,那么你现在应该是可以通过你的公网 ip 或者域名访问到你的网站了。
但是还有一个问题,到目前为止,uWSGI和gunicorn都是直接通过命令行运行,并不能够在后台运行,也是当我们关闭了xShell(或者你使用的是Putty及其他SSH连接的软件),将无法再访问到你的应用。所以我们需要让uWSGI或gunicorn在后台运行,也就是所谓的daemon(守护进程)。
如果你熟悉Linux命令,你应该知道在Linux中后台运行可以通过 nohup 命令,例如我们要让gunicorn在后台运行,我们只需要运行 nohup 命令:
运行后你可以通过 ps -e | grep gunicorn 指令来查看到当前gunicorn的运行状态:
如果你选择的是uWSGI,同样也可以通过 nohup 命令来实现守护进程:
这样你就可以关闭连接服务器的终端,还能通过你的浏览器访问到你的 Flask 应用了!
但是 nohup 运行的后台程序并不能够可靠的在后台运行,我们最好让我们的后台程序能够监控进程状态,还能在意外结束时自动重启,这就可以使用一个使用Python开发的进程管理程序supervisor。
参考: https://www.cnblogs.com/Dicky-Zhang/p/6171954.html
首先我们通过 apt 来安装supervisor:
安装完成后,我们在 /etc/supervisor/conf.d/ 目录下创建我们控制进程的配置文件,并以.conf结尾,这样将会自动应用到主配置文件当中,创建后添加如下的配置内容:
在上面的配置文件中, [program:demo] 设置了进程名,这与之后操作进程的状态名称有关,为 demo ; command 为进程运行的命令,必须使用绝对路径,并且使用虚拟环境下的 gunicorn 命令; user 指定了运行进程的用户,这里设置为 root
保存配置文件之后,我们需要通过命令来更新配置文件:
命令行将显示: demo: added process group ,然后我们来启动这个 demo 进程:
当然你也直接在命令行输入 supervisorctl 进入supevisor的客户端,查看到当前的进程状态:
通过 stop 命令便可以方便的停止该进程:
‘捌’ 阿里云云服务器如何配置网站环境
阿里云云服务器配置网站环境可以根据自己需求选择nginx或者apache,作为web服务器。
现在一般是用nginx作为web服务器或者负载均衡转发到应用服务器。远程登录到阿里云服务器,安装nginx,之后配置nginx。nginx的配置文件默认如下:
我们可以选择用nginx的默认配置,也可以设置自己根目录。根目录的作用就是指向自己web应用要发布的位置。我们可以采用ftp工具把web应用上传到nginx指向的根目录,之后重新加载nginx。执行如下命令:
nginx-sreload
这样就可以通过阿里云游粗服务器的IP地址来访问刚才部署神槐镇的web应用。
如果想通过域名来访问网站还需要购买域明猛名,之后在域名服务商的后台设置域名解析到阿里云服务器,这样就可以用域名访问网站了。但是如果是国内服务器还需要网站备案,如果服务器是位于香港或者海外就不需要备案了,直接域名解析到服务器就可以访问了。
‘玖’ koyeb云服务器怎么部署
koyeb云服务器部署的方法如下:
目前为服务器提供HTTP服务的主要包括IIS、Apache(Tomcat)、Nginx三类。IIS是windows系统专属,即微软提供的,不具有平台兼容性,只能在windows平台使用。Apache和Nginx属于更为通用的产品,windowslinuxmac系统上都可以安装部署。
由于网站服务器一般会同时需要部署安装数据库软件和服务器语言,因此许多集成套装产品就因此而获得青睐。如wampserver就是windows系统下apache+php+mysql三个软件集成的产品,其中apache为HTTP服务软件,php为服务器语言,mysql为数据库服务软件;anmpserver是一款集成apache服务器、nginx服务器、mysql数据库、php解释器的整合软件包。
由此看来,如果想部署一个网站服务,HTTP服务软件、数据库服务软件、服务器语言解释器这三套一个也不能少,其中HTTP服务软件负责处理数据的解析和传输,数据库软件负责数据的存储与查询等操作、服务器语言解释器负责对数据的处理、操作数据库等。
‘拾’ 阿里云服务器怎么配置
看你装什么系统,如:Linux, 1、使用上一节说明搭建好的FTP上传一键安装包;
2、使用putty远程登录服务器。这里不在赘述,如下图。
查看大图
3、进入相关目录,执行语句安装,可能需要先修改相应权限,执行语句如下
chmod –R 777 sh 修改目录权限
cd sh 进入相关目录
./install.sh 执行安装
执行这个语句后会出现选择WEB版本的提示
apache or nginx,input a or n:
这里我输入a选择apache然后安装程序会继续执行
需要比较长的时间,估计要半个小时,等待安装完成
4、上一步执行成功后,就表示WEB服务器已经安装完成,输入cat account.log就可以查看MYSQL账号密码,如下图所示
查看大图
5、以上4步,网站服务器已经搭建完毕,如果以后需要增加新的虚拟主机,可修改一下文件:
选择了nginx 那么会有一个nginx 目录在
/alidata/server/nginx/
Nginx 配置文件在/alidata/server/nginx/conf
Nginx虚拟主机添加 你可以修改/alidata/server/nginx/conf/vhosts/phpwind.conf
选择了apache那么会有一个httpd 目录在
/alidata/server/httpd
apache 配置文件在/alidata/server/httpd/conf
apache虚拟主机添加 你可以修改/alidata/server/httpd/conf/vhosts/phpwind.conf