LNMP环境部署_inmap nginx部署-程序员宅基地

技术标签: 运维管理  nginx  linux  mysql  

LNMP环境部署

1. LNMP部署规划

  1. 软件规划
版本
Nginx Nginx 1.16.1
MySQL MySQL 5.7.28
PHP PHP 7.0.33
  1. 系统规划

操作系统:CentOS Linux release 7.3.1611

主机 IP地址
node07.host.com 172.24.248.19
node08.host.com 172.24.248.20
node09.host.com 172.24.248.21

2. Nginx部署

2.1 Nginx介绍

nginx官网

WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。 WWW 是 Internet的多媒体信息查询工具,是 Internet 上近年才发展起来的服务,也是发展最快和目前用的最广泛的服务。正是因为有了WWW工具,才使得近年来 Internet 迅速发展,且用户数量飞速增长。

Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

它已经在众多流量很大的俄罗斯网站上使用了很长时间,这些网站包括YandexMail.RuVKontakte,以及Rambler。据Netcraft统计,在2012年8月份,世界上最繁忙的网站中有11.48%使用Nginx作为其服务器或者代理服务器。目前互联网主流公司360、百度、新浪、腾讯、阿里等,目前中国互联网企业70%以上公司都在使用nginx作为自己的web服务器。

Nginx特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。

Nginx相对于Apache优点

1)   高并发响应性能非常好,官方Nginx处理静态文件并发5w/s

2)   反向代理性能非常强。(可用于负载均衡)

3)   内存和cpu占用率低。(为Apache的1/5-1/10)

4)   对后端服务有健康检查功能。

5)   支持PHP cgi方式和fastcgi方式。

6)   配置代码简洁且容易上手。

2.2 Nginx 工作原理

Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作.

Nginx的模块从结构上分为核心模块、基础模块和第三方模块

核心模块:HTTP模块、EVENT模块和MAIL模块

基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块,

第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块。

Nginx的高并发得益于其采用了epoll模型,与传统的服务器程序架构不同,epoll是linux内核2.6以后才出现的。Nginx采用epoll模型,异步非阻塞,而Apache采用的是select模型:

Select特点:select 选择句柄的时候,是遍历所有句柄,也就是说句柄有事件响应时,select需要遍历所有句柄才能获取到哪些句柄有事件通知,因此效率是非常低。

epoll的特点:epoll对于句柄事件的选择不是遍历的,是事件响应的,就是句柄上事件来就马上选择出来,不需要遍历整个句柄链表,因此效率非常高

2.3 Nginx安装

  1. 环境依赖
[[email protected] ~]#  yum -y install vim lrzsz tree screen psmisc lsof tcpdump wget ntpdate gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools iotop bc zip unzip zlib-devel bash-comletion nfs-utils automake libxml2 libxml2-devel libxslt libxslt-devel perl perl-ExtUtils-Embed gd-devel GeoIP GeoIP-devel GeoIP-data 

  1. 编译安装nginx
[[email protected] /usr/local/src]# tar xf nginx-1.16.1.tar.gz
[[email protected] /usr/local/src]# useradd nginx -s  /sbin/nologin -u 2000 
[[email protected] /usr/local/src]# cd nginx-1.16.1
[[email protected] /usr/local/src/nginx-1.16.1]# cat src/core/nginx.h |grep NGINX_VER
#define NGINX_VERSION      "1.16.1"   
define NGINX_VER          "nginx/" NGINX_VERSION   #开启server_tokens显示此信息
[[email protected] /usr/local/src/nginx-1.16.1]# cat src/http/ngx_http_header_filter_module.c |grep "NGINX_VER_BUILD"
static u_char ngx_http_server_build_string[] = "Server: " NGINX_VER_BUILD CRLF; #关闭server_tokens显示此信息
[[email protected] /usr/local/src/nginx-1.16.1]#  

[[email protected] /usr/local/src/nginx-1.16.1]# ./configure --prefix=/apps/nginx  --with-http_ssl_module --with-http_v2_module  --with-http_realip_module --with-http_addition_module  --with-http_image_filter_module --with-http_geoip_module --with-http_gunzip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
[[email protected] /usr/local/src/nginx-1.16.1]# make && make install

  1. 配置nginx,自定义json日志,error页面,并启动nginx
[[email protected] /apps/nginx/conf]# egrep -v "#|^$" nginx.conf
user  nginx;
worker_processes  2;
worker_cpu_affinity 01 10;
error_log  /apps/nginx/logs/error.log  error;
pid        /apps/nginx/logs/nginx.pid;
worker_priority 0;
worker_rlimit_nofile 65536;
events {
     
  worker_connections  65536;
  use epoll;
  accept_mutex on;
  multi_accept on;
}
http {
     
  include       mime.types;
  default_type  application/octet-stream;

  log_format access_json '{"@timestamp":"$time_iso8601",'
     '"host":"$server_addr",'
     '"clientip":"$remote_addr",'
     '"size":$body_bytes_sent,'
     '"responsetime":$request_time,'
     '"upstreamtime":"$upstream_response_time",'
     '"upstreamhost":"$upstream_addr",'
     '"http_host":"$host",'
     '"uri":"$uri",'
     '"domain":"$host",'
     '"xff":"$http_x_forwarded_for",'
     '"referer":"$http_referer",'
     '"tcp_xff":"$proxy_protocol_addr",'
     '"http_user_agent":"$http_user_agent",'
     '"status":"$status"}';
   access_log /apps/nginx/logs/access_json.log access_json;
  sendfile        on;
  keepalive_timeout  65 65;
  server_tokens off;
  server {
     
      listen       80;
      server_name  localhost;
      charset utf-8;
      location / {
     
          root   html;
          index  index.html index.htm;
      }
      error_page   500 502 503 504  /50x.html;
      location = /50x.html {
     
          root   html;
      }
  }
include /apps/nginx/conf/conf.d/*.conf;
}
[[email protected] /apps/nginx/conf]#
[[email protected] /apps/nginx]# cd html/
[[email protected] /apps/nginx/html]# echo "access page error" > error.html
[[email protected] /apps/nginx/html]# chown nginx.nginx -R /apps/nginx/
# 查看版本以及编译参数
[[email protected] ~]# /apps/nginx/sbin/nginx -V
nginx version: nginx/1.16.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/apps/nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_image_filter_module --with-http_geoip_module --with-http_gunzip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
# 检查nginx配置语法是否正确
[[email protected] ~]# /apps/nginx/sbin/nginx -t
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
[[email protected] ~]# 
# 启动nginx
[[email protected] ~]# /apps/nginx/sbin/nginx
  1. 页面验证nginx

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gk6DeCFP-1612149734988)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210126173130434.png)]

3. MySQL部署

官网地址

  1. 二进制安装mysql
[[email protected] ~]# tar xf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz 
[[email protected] ~]# ln -sv /usr/local/mysql-5.6.36-linux-glibc2.5-x86_64 /usr/local/mysql-5.6.36
"/usr/local/mysql-5.6.36" -> "/usr/local/mysql-5.6.36-linux-glibc2.5-x86_64"
[[email protected] ~]# useradd mysql -s /sbin/nologin
[[email protected] ~]# mkdir -pv /opt/mysql /var/lib/mysql
mkdir: 已创建目录 "/opt/mysql"
[[email protected] ~]# chown -R mysql.mysql /opt/mysql /var/lib/mysql -R

  1. 初始化数据库
[[email protected] ~]# /usr/local/mysql-5.6.36/scripts/mysql_install_db --user=mysql --datadir=/opt/mysql --basedir=/usr/local/mysql-5.6.36
[[email protected] ~]# cp /usr/local/mysql-5.6.36/support-files/mysql.server /etc/init.d/mysqld
[[email protected] ~]# chmod a+x /etc/init.d/mysqld 
  1. 配置文件
[[email protected] /usr/local/mysql-5.6.36]# cat my.cnf 
[mysqld]
basedir = /usr/loca/mysql
datadir = /opt/mysql
port = 3306
# server_id = .....
socket = /opt/mysql/mysql.sock
user=mysql
symbolic-links=0
innodb_file_per_table=1
max_connections=10000

[client]
port=3306
socket = /var/lib/mysql/mysql.sock

[mysqld_safe]
log-error=/usr/local/mysql/log/mysqld.log
pid-file=/tmp/mysql.sock
[[email protected] /usr/local/mysql-5.6.36]# 

[[email protected] /usr/local/mysql-5.6.36/log]# touch mysqld.log
[[email protected] /usr/local/mysql-5.6.36]# ./mysql.server start
Starting MySQL..... SUCCESS!

4. PHP部署

  1. 官网地址
  2. PHP各版本下载地址
  1. 软件环境依赖
[[email protected] ~]# yum -y install pcre pcre-devel openssl openssl-devel libicu-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel  libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn-devel  openldap openldap-devel nss_ldap jemalloc-devel cmake boost-devel bison libevent automake libevent-devel gd gd-devel libtool* libmcrypt libmcrypt-devel mcrypt mhash libxslt libxslt-devel readline readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-devel openjpeg bzip2 bzip2-devel
  1. 解压安装
[[email protected] /usr/local/src]# wget https://museum.php.net/php7/php-7.2.15.tar.gz
[[email protected] /usr/local/src]# tar xf php-7.2.15.tar.gz
[[email protected] /usr/local/src]# cd php-7.2.15
[[email protected] /usr/local/src/php-7.2.15]# ./configure --prefix=/apps/php-7.2.15 --with-config-file-path=/apps/php-7.2.15/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-pear --with-curl --with-png-dir --with-freetype-dir --with-iconv --with-mhash --with-zlib --with-xmlrpc --with-xsl --with-openssl --with-mysqli  --with-pdo-mysql --disable-debug --enable-zip --enable-sockets --enable-soap --enable-inline-optimization --enable-xml --enable-ftp --enable-exif --enable-wddx --enable-bcmath --enable-calendar --enable-shmop --enable-dba --enable-sysvsem --enable-sysvshm --enable-sysvmsg  --enable-libxml --with-gd --with-jpeg-dir --with-bz2  --with-mcrypt  --enable-gd-native-ttf --enable-fastcgi --enable-pdo --enable-mbstring --enable-exif --enable-opcache --enable-mbregex  --enable-pcntl  --with-gettext --enable-session --enable-ctype  --enable-dom --with-libdir=lib64 --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd  --disable-fileinfo
[[email protected] /usr/local/src/php-7.2.15]# make && make install

  1. 生成配置文件
[[email protected] ~]# cd /apps/php-7.2.15/etc/php-fpm.d/
[[email protected] /apps/php-7.2.15/etc/php-fpm.d]# cp www.conf.default www.conf
[[email protected] /apps/php-7.2.15/etc/php-fpm.d]# cp /usr/local/src/php-7.2.15/php.ini-production /apps/php-7.2.15/etc/php.ini
[[email protected] /apps/php-7.2.15/etc/php-fpm.d]# useradd www -s /sbin/nologin -u 1001
[[email protected] /apps/php-7.2.15/etc/php-fpm.d]# cat www.conf
[www]
user = www
group = www
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 30
pm.min_spare_servers = 30
pm.max_spare_servers = 35
pm.status_path = /status
ping.path = /ping
ping.response = pong
access.log = log/$pool.access.log
slowlog = log/$pool.log.slow
[[email protected] /apps/php-7.2.15/etc/php-fpm.d]#
[[email protected] /apps/php-7.2.15/etc]# mkdir /apps/php-7.2.15/log
[[email protected] /apps/php-7.2.15/etc]# cp php-fpm.conf.default php-fpm.conf
[[email protected] /apps/php-7.2.15/etc]#
  1. 启动并验证php-fpm
[[email protected] ~]# /apps/php-7.2.15/sbin/php-fpm -t
[29-Jan-2021 13:59:28] NOTICE: configuration file /apps/php-7.2.15/etc/php-fpm.conf test is successful
# 验证php-fpm
[[email protected] ~]# /apps/php-7.2.15/sbin/php-fpm -c /apps/php-7.2.15/etc/php.ini

[[email protected] ~]# netstat -lntp |grep 9000
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      1630/php-fpm: maste

4.1 Nginx整合Php

  1. 准备测试页
[[email protected] ~]# cat /apps/nginx/html/index.php
<?php
 phpinfo();
?>
[[email protected] ~]#
  1. 整合php
[[email protected] ~]# cat /apps/nginx/conf/nginx.conf|egrep -v "#|^$"
user  nginx;
worker_processes  2;
worker_cpu_affinity 01 10;
error_log  /apps/nginx/logs/error.log  error;
pid        /apps/nginx/logs/nginx.pid;
worker_priority 0;
worker_rlimit_nofile 65536;
events {
     
   worker_connections  65536;
   use epoll;
   accept_mutex on;
   multi_accept on;
}
http {
     
   include       mime.types;
   default_type  application/octet-stream;
   
   log_format access_json '{"@timestamp":"$time_iso8601",'
      '"host":"$server_addr",'
      '"clientip":"$remote_addr",'
      '"size":$body_bytes_sent,'
      '"responsetime":$request_time,'
      '"upstreamtime":"$upstream_response_time",'
      '"upstreamhost":"$upstream_addr",'
      '"http_host":"$host",'
      '"uri":"$uri",'
      '"domain":"$host",'
      '"xff":"$http_x_forwarded_for",'
      '"referer":"$http_referer",'
      '"tcp_xff":"$proxy_protocol_addr",'
      '"http_user_agent":"$http_user_agent",'
      '"status":"$status"}';
    access_log /apps/nginx/logs/access_json.log access_json;
   sendfile        on;
   keepalive_timeout  65 65;
   server_tokens off;
   server {
     
       listen       80;
       server_name  localhost;
       charset utf-8;
       location / {
     
           root   html;
           index  index.php index.html index.htm;
           if ($http_user_agent ~ "ApacheBench|WebBench|TurnitinBot|Sogou web spider|Grid service"){
     
             return 403;
          }
       }
       error_page   500 502 503 504  /50x.html;
       location = /50x.html {
     
           root   html;
       }
       location ~ \.php$ {
     
           root           html;
           fastcgi_pass   127.0.0.1:9000;
           fastcgi_index  index.php;
           fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
           include        fastcgi_params;
       }
   }
include /apps/nginx/conf/conf.d/*.conf;
}
[[email protected] ~]# 
  1. 重启nginx,验证php
[[email protected] ~]# /apps/nginx/sbin/nginx -t
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
[[email protected] ~]# /apps/nginx/sbin/nginx -s reload

在这里插入图片描述

4.2 增加虚拟主机

  1. 修改配置文件,在配置文件增加虚拟主机,配置参数和虚拟主机一旦很多,很容易很长,采用多配置分开的模式如在nginx.conf http模块中引用
[[email protected] ~]# cd /apps/nginx/conf/
include /apps/nginx/conf/conf.d/*.conf;
  1. 增加虚拟主机访问节点配置
[[email protected] /apps/nginx/conf]# mkdir conf.d
[[email protected] /apps/nginx/conf/conf.d]# cat pc.conf 
server {
     
   listen       80;
   server_name  172.24.248.20;
 
   location / {
     
       root   /data/nginx/html/pc;
       index  index.html;
      
    }

    location /images {
     
       root /data/nginx/images;
       index index.html;
   }
   
    error_page 500 502 503 504 404 /error.html;
    location = /error.html{
     
       root html;
   }
  
}    
[[email protected] /apps/nginx/conf/conf.d]#

[[email protected] /data/nginx]# cat /data/nginx/images/index.html 
images
[[email protected] /data/nginx]# cat /data/nginx/html/pc/index.html 
pc  web
[[email protected] /data/nginx]# curl 172.24.248.20
pc  web
[[email protected] /data/nginx]# curl 172.24.248.20/images
images png

总结:
LNMP整体安装相对比较简单,而源码安装需要提前准备好源码包以及环境依赖。另外环境安装可以不需要过多去关注,更多的则是配置方面,因为安装好之后就不会在去处理,当然安装的方式分可选择自动化运维工具一键安装,也可以使用脚本一键安装。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chuangxinweike/article/details/113504022

智能推荐

日期与时间处理详解_0\洲-程序员宅基地

文章浏览阅读1.2k次,点赞7次,收藏2次。时间相关概念秒在1967年的第13届国际度量衡会议上决定以原子时定义的秒作为时间的国际标准单位:铯133原子基态的两个超精细能阶间跃迁对应辐射的9,192,631,770个周期的持续时间, 起始历元定在1958年1月1日0时。原子钟是一种时钟,它以原子共振频率标准来计算及保持时间的准确。原子钟是世界上已知最准确的时间测量和频率标准。GMT格林威治标准时间(Greenwich Mean Time),是指位于伦敦郊区的皇家格林威治天文台的标准时间,因为本初子午线(Prime merid..._0\洲

java 的 io流 读取文件里面 的内容(不定时更新)_java io读取文件内容-程序员宅基地

文章浏览阅读4.8k次,点赞4次,收藏29次。io流_java io读取文件内容

图像处理——过程全解析,配图超详细!-程序员宅基地

文章浏览阅读1.4k次。点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达摘自先进测控之家《长着眼睛的机械手》课题摘要——利用图像处理技术,在50*50CM的区域内识别出5枚硬币(硬币位置任意),并且控制机械手逐一拾取5枚硬币,然后把5枚硬币逐一叠放到指定位置(指定位置随机)。图像处理过程详解——LabVIEWVision Assistant硬币位置识别算法分析与设计硬币的识别是本系统软件设计最为关..._图像处理

[ MATLAB ] 傅里叶变换(三):傅里叶变换_傅里叶变换可视化,plot3函数,matlab-程序员宅基地

文章浏览阅读774次,点赞35次,收藏25次。专题的前两篇文章([ MATLAB ] 傅里叶变换(二):傅里叶级数(复指数表示)),我们讨论了连续周期信号傅里叶级数的两种表示形式,初步建立了频谱的概念。然而,就实际经验而言,非周期信号才是主流。因此,这篇文章将讨论非周期连续信号的谱密度(通常简称为频谱),即大名鼎鼎的傅里叶变换FT,并用Matlab仿真加强理解。可以采用物理中的密度的方式类比谱密度的概念,从而理解傅里叶变换中谱密度的意义。不需要再执着于分量幅值的绝对大小,而是聚焦于相对大小。_傅里叶变换可视化,plot3函数,matlab

5G手机回归,鸿蒙份额激增,将进一步夯实三大操作系统的地位-程序员宅基地

文章浏览阅读360次,点赞8次,收藏8次。市调机构给出的数据指11月份华为手机在国内手机市场的份额达到14%,远超此前鸿蒙系统在国内手机操作系统8%的市场份额,这意味着随着华为5G手机的回归,鸿蒙系统的市占率将快速上涨。此前鸿蒙系统主要依靠华为手机的存量用户支持,在华为的推动下,诸多华为存量手机用户都转为了鸿蒙系统,这成为鸿蒙系统的第一批种子。随后华为在自己的穿戴设备、汽车等诸多产品上发展鸿蒙系统,还通过与美的等国内家电企业合作推广鸿蒙系...

openstack pike单机一键安装shell的方法(后期会转为python)-程序员宅基地

文章浏览阅读183次,点赞9次,收藏2次。#VM虚拟机8G内存,安装完毕,半个小时左右#在线安装#环境 centos 7.4.1708 x86_64#在线安装openstack pikePS: 排版问题,还在研究。wangleideMacBook-Pro:Downloads wanglei$ cat pike.install.sh#!/bin/sh# openstack pike 单机 一键安装# 环..._ali-pike.repo

随便推点

ceph中的radosgw相关总结_radosgw -c-程序员宅基地

文章浏览阅读627次。https://blog.csdn.net/zrs19800702/article/details/53101213http://blog.csdn.net/lzw06061139/article/details/51445311https://my.oschina.net/linuxhunter/blog/654080rgw 概述Ceph 通过radosgw提供RES..._radosgw -c

前端数据可视化ECharts使用指南——制作时间序列数据的可视化曲线_echarts 时间序列-程序员宅基地

文章浏览阅读3.7k次,点赞6次,收藏9次。我为什么选择ECharts ? 本周学校课程设计,原本随机佛系选了一个51单片机来做音乐播放器,结果在粗略玩了CN-DBpedia两天后才回过神,课设还没有开始整。于是懒癌发作,碍于身上还有比赛的作品没交,本菜鸡对硬件也没啥天赋,所以就直接把题目切换成软件方面的题目。写python的同学选择了一个时间序列数据的可视化曲线程序设计题目,果真python在数据可视化这一点性能很优秀。..._echarts 时间序列

ApplicationEventPublisherAware事件发布-程序员宅基地

文章浏览阅读1.6k次。事件类:/** * *   * @className: EarlyWarnPublishEvent *   * @description:数据风险预警发布事件 *   * @param: *   * @return: *   * @throws: *   * @author: lizz *   * @date: 2020/05/06 15:31 * */public cl..._applicationeventpublisheraware

自定义View实现仿朋友圈的图片查看器,缩放、双击、移动、回弹、下滑退出及动画等_imageview图片边界回弹-程序员宅基地

文章浏览阅读1.2k次。如需转载请注明出处!点击小图片转到图片查看的页面在Android开发中很常用到,抱着学习和分享的心态,在这里写下自己自定义的一个ImageView,可以实现类似微信朋友圈中查看图片的功能和效果。主要功能需求:1.缩放限制:自由缩放,有最大和最小的缩放限制 2居中显示:.若图片没充满整个ImageView,则缩放过程将图片居中 3.双击缩放:根据当前缩放的状态,双击放大两倍或缩小到原来 4.单指_imageview图片边界回弹

PreScan第二课:构建实验_prescan坐标系-程序员宅基地

文章浏览阅读5.5k次,点赞8次,收藏37次。为了自己和他人学习的需要,建了一个PreScan的QQ群:613469333(已满)/ 778225322(可加),加群前请私聊群主(QQ:2059799865)加入。群管理需要花费时间和精力,为了鼓励管理员和群成员积极互动,入群需交¥9.99的群费。目录1 Conventions坐标系统2 Roads3 Path&trajectories路径和轨迹3.1 Pat..._prescan坐标系

三分钟带你掌握 CSS3 的新属性_采用css转换,边框阴影等新特性完成css3偏光图像画廊设计-程序员宅基地

文章浏览阅读3.8w次,点赞9次,收藏10次。1. css3简介CSS 用于控制网页的样式和布局,CSS3 是最新的CSS标准,CSS3 完全向后兼容,因此您不必改变现有的设计。浏览器通常支持 CSS2,但是现在大部分浏览器也实现了css3的很多特性。CSS3 被划分为模块。其中最重要的 CSS3 模块包括:选择器框模型背景和边框文本效果2D/3D 转换动画多列布局用户界面2. css3边框2.1 边框圆角Internet Explorer 9+ 支持 border-radius 和 box-shadow 属性。Fir_采用css转换,边框阴影等新特性完成css3偏光图像画廊设计

推荐文章

热门文章

相关标签