本文記錄 LNMP(Linux + Nginx + MySQL + PHP)生產環境的源碼編譯安裝全過程及核心配置優化,適合需要精確控制版本與模塊的場景。
# OpenSSL tar zxf openssl-1.0.1r.tar.gz # PCRE tar zxf pcre-8.32.tar.gz cd pcre-8.32 ./configure --prefix=/usr/local/lanmp/lib/pcre make && make install # zlib tar zxf zlib-1.2.7.tar.gz cd zlib-1.2.7 ./configure --prefix=/usr/local/lanmp/lib/zlib make && make install
cd nginx-1.8.0 ./configure \ --prefix=/usr/local/lanmp/nginx \ --user=www-data \ --group=www-data \ --with-http_ssl_module \ --with-openssl=/usr/local/src/openssl-1.0.1r \ --with-zlib=/usr/local/src/zlib-1.2.7 \ --with-pcre=/usr/local/src/pcre-8.32 \ --conf-path=/etc/lanmp/nginx.conf make && make install
關鍵參數說明:
--with-http_ssl_module:啟用 HTTPS 支持--with-openssl/zlib/pcre:指定依賴庫源碼路徑(靜態編譯)--conf-path:配置文件路徑/usr/local/lanmp/nginx/sbin/nginx # 啟動 cp /usr/local/lanmp/nginx/sbin/nginx /etc/init.d/ # 加入服務
# 全局區塊
worker_processes 2;
worker_rlimit_nofile 65535;
events {
use epoll; # 高性能事件模型
worker_connections 10240;
}
http {
keepalive_timeout 0;
gzip on;
gzip_buffers 16 8K;
gzip_comp_level 6;
gzip_min_length 4K;
gzip_types text/html text/css;
gzip_vary on;
server {
location ~ .*\.(gif|jpg|png|bmp|swf)$ {
expires 1d; # 靜態資源緩存 1 天
}
}
}
yum -y install ncurses-devel # 或 apt-get install libncurses5-dev cmake . \ -DCMAKE_INSTALL_PREFIX=/usr/local/lanmp/mysql \ -DMYSQL_DATADIR=/usr/local/lanmp/mysql/data \ -DSYSCONFDIR=/etc/lanmp/mysql \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_MEMORY_STORAGE_ENGINE=1 \ -DWITH_READLINE=1 \ -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \ -DMYSQL_TCP_PORT=3306 \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DEXTRA_CHARSETS=all \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci make && make install
groupadd mysql useradd -r -g mysql mysql chown -R mysql:mysql /usr/local/lanmp/mysql cd /usr/local/lanmp/mysql/scripts ./mysql_install_db --user=mysql --basedir=/usr/local/lanmp/mysql --datadir=/usr/local/lanmp/mysql cp /usr/local/lanmp/mysql/support-files/mysql.server /etc/init.d/mysqld cp /usr/local/lanmp/mysql/support-files/my-default.cnf /etc/lanmp/mysql/my.cnf service mysqld start /usr/local/lanmp/mysql/bin/mysqladmin -u root password "123456"
innodb_buffer_pool_size = 128M port = 3306 server_id = 1 socket = /var/lib/mysql/mysql.sock back_log = 384 key_buffer_size = 128M max_connections = 500 thread_concurrency = 2
依次編譯安裝至 /usr/local/lanmp/lib/:
./configure \ --prefix=/usr/local/lanmp/fcgphp \ --with-config-file-path=/etc/lanmp/fcgphp.ini \ --with-mysqli=/usr/local/lanmp/mysql/bin/mysql_config \ --enable-mbstring \ --with-freetype-dir=/usr/local/lanmp/lib/freetype \ --with-jpeg-dir=/usr/local/lanmp/lib/libjpeg \ --with-png-dir=/usr/local/lanmp/lib/libpng \ --with-zlib-dir=/usr/local/lanmp/lib/zlib \ --with-libxml-dir=/usr/local/lanmp/lib/libxml \ --enable-xml \ --with-iconv-dir=/usr/local/lanmp/lib/libiconv \ --enable-fpm \ --with-pdo-mysql=/usr/local/lanmp/mysql make && make install cp php.ini-development /etc/lanmp/fcgphp.ini
cd /usr/local/lanmp/fcgphp/etc/php-fpm.d/ cp www.conf.default www.conf # 啟動 /usr/local/lanmp/fcgphp/sbin/php-fpm
pm = dynamic pm.max_children = 300 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35
源碼編譯雖繁瑣,但能精確控制版本、模塊與優化參數,適合生產環境精細化運維。建議將編譯參數腳本化,便於後續復現與升級。