Уведомления
Очистить все

Установка Nginx в Linux

1 Записи
1 Пользователи
0 Likes
465 Просмотры
84-150 Okolokompa Форум
(@11111111)
Estimable Member
Присоединился: 4 года назад
Записи: 74
Создатель темы  

Установим некоторые базовые пакеты, включая PHP-FPM.

$ sudo apt-get update
$ sudo apt-get install vim      # Everyone likes vim, right?
$ sudo apt-get install build-essential
$ sudo apt-get install python-software-properties

# Run these steps if you want php 5.4, rather than 5.3
$ sudo add-apt-repository ppa:ondrej/php5
$ sudo apt-get update

# Install PHP-FPM
$ sudo apt-get install php5-fpm

# We also need to install php5-cli to run php in CLI with the usual "php" command
$ sudo apt-get install php5-cli

# Other general PHP needs
$ sudo apt-get install php5-mysql
$ sudo apt-get install php5-curl
$ sudo apt-get install php5-gd
$ sudo apt-get install php5-mcrypt

# Let's install MySQL also
$ sudo apt-get install mysql-server

Git

Возможно, вам понадобится Git на вашем сервере, в зависимости от вашей стратегии развертывания или для поддержки менеджеров пакетов, таких как Composer.

$ sudo apt-get install git-core

Composer

Если вы используете Composer, он также должен быть установлен на вашем производственном сервере для добавления зависимостей.

Примечание: для производственного использования вы должны заблокировать номера версий зависимостей. Таким образом, вы не получите никаких сюрпризов, когда обновите упаковщики Composer на своем живом сервере.

Этот установщик использует php и не может быть передан по каналу php-fpm, поэтому мы установили пакет php5-cli.

# Install composer globally
$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer

Nginx

Теперь, когда у нас установлены основы, давайте приступим к установке Nginx.

$ sudo apt-get install nginx
$ sudo service nginx start  # Doesn't start itself upon install

Теперь, поскольку приоритет в Nginx часто зависит от скорости сайта, я перейду к некоторым настройкам, которые установят некоторые передовые практики для кэширования, gzip, а также перезаписи в index.php и так далее.

Во-первых, давайте возьмем лучший список типов MIME для использования Nginx:

# I ran this as root You may need to curl <URL> | sudo tee /etc/nginx/mime.types
$ curl https://raw.github.com/h5bp/server-configs-nginx/master/mime.types > /etc/nginx/mime.types

Во-вторых, давайте отредактируем основной конфигурационный файл Nginx.

$ vim /etc/nginx/nginx.conf

Linux настраивает Nginx для запуска от имени пользователя "www-data". Я также настроил его запуск в качестве группы «www-data», аналогично Apache.

user www-data www-data;     # Add www-data group name

Следующее значение по умолчанию 4, но я установил worker_processes  = 2 для моего хостинга. Обычно устанавливается в 2 раза больше количества ядер. У меня компьютер одноядерный, поэтому я использую 2 рабочих процесса.

worker_processes 2;

Мы также установим число обработчиков файлов на большее, чем количество рабочих соединений.

events {
    worker_connections 8000; # Number of open network connections
}

# Number of file handles per worker
# Each TCP connection is a file handler
# so needs to be larger than # connections
worker_rlimit_nofile 10000;

В том же файле, внутри блока http, мы собираемся сделать несколько настроек. Они прокомментированы ниже.

Примечание: не заменяйте свой http {} блок полностью этим - вместо этого измените или добавьте следующие директивы по мере необходимости. Это не полный файл nginx.conf.

http {

    # Не отображать версию nginx в заголовке
    server_tokens off;      

    # Улучшить форматирование журнала
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';

    # Уменьшить время ожидания запроса
    keepalive_timeout 20;

    # Ускорить передачу файлов
    sendfile        on;

    # Don't send out partial friends in packets
    tcp_nopush      on;

    # Collate smaller packets into fewer larger ones
    tcp_nodelay     off;

    # Увеличить степень сжатия
    gzip on;
    gzip_http_version  1.0;     # Works for http 1.1 and 1.0
    gzip_comp_level 5;          # Increase level of compression
    gzip_min_length 256;        # Don't compress small files, compressed versions can end up larger
    gzip_proxied any;           # Compress files for proxies as well
    gzip_vary on;               # Proxies cache both reglar and gzipped versions of file
    gzip_types                  # Gzip the following types of requests/files
        application/atom+xml
        application/javascript
        application/json
        application/rss+xml
        application/vnd.ms-fontobject
        application/x-font-ttf
        application/x-web-app-manifest+json
        application/xhtml+xml
        application/xml
        font/opentype
        image/svg+xml
        image/x-icon
        text/css
        text/plain
        text/x-component;

}

Вот и все для nginx.conf. Далее давайте настроим виртуальный хост.

$ cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example
$ vim /etc/nginx/sites-available/example

Давайте отредактируем этот «пример» виртуального хоста.

# Redirect to non-www
server {
    server_name *.example.com;
    return 301 $scheme://example.com$request_uri;
}

server {

    # Document root
    root /var/www/example.com;

    # Try static files first, then php
    index index.html index.htm index.php;

    # Specific logs for this vhost
    access_log /var/log/nginx/example.com-access.log;
    error_log  /var/log/nginx/example.com-error.log error;

    # Make site accessible from  http://localhost/ 
    server_name example.com;

    # Specify a character set
    charset utf-8;

    # h5bp nginx configs
    include conf/h5bp.conf;

    # Redirect needed to "hide" index.php
    location / {
            try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    # Don't log robots.txt or favicon.ico files
    location = /favicon.ico { log_not_found off; access_log off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    # 404 errors handled by our application, for instance Laravel or CodeIgniter
    error_page 404 /index.php;

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

            # With php5-cgi alone:
            # fastcgi_pass 127.0.0.1:9000;
            # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
    }

    # Deny access to .htaccess
    location ~ /\.ht {
            deny all;
    }        

}

Обратите внимание, что мы добавили туда файл conf/h5bp.conf. Это добавляет некоторые разумные значения по умолчанию, как кэш expration, защиту системных файлов, что позволяет междоменный доступ к веб - шрифтам и некоторым возможностям для работы IE.

$ mkdir /etc/nginx/conf
$ curl https://raw.github.com/h5bp/server-configs-nginx/master/conf/h5bp.conf > /etc/nginx/conf/h5bp.conf
$ curl https://raw.github.com/h5bp/server-configs-nginx/master/conf/expires.conf > /etc/nginx/conf/expires.conf
$ curl https://raw.github.com/h5bp/server-configs-nginx/master/conf/x-ua-compatible.conf > /etc/nginx/conf/x-ua-compatible.conf
$ curl https://raw.github.com/h5bp/server-configs-nginx/master/conf/protect-system-files.conf > /etc/nginx/conf/protect-system-files.conf
$ curl https://raw.github.com/h5bp/server-configs-n

Вот и всё для конфига Nginx. Как только ваш vhost настроен, вам нужно добавить его в каталог /etc/nginx/sites-enabled. Это делается с помощью символической ссылки:

$ sudo ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/example

Не забудьте перезагрузить Nginx после завершения настройки:

$ sudo service nginx reload

Очистка PHP

Осталось сделать очистку PHP.

$ sudo vim /etc/php5/fpm/php.ini
> cgi.fix_pathinfo=0                    # Change from 1 (exact file paths required)
> post_max_size = 8M                    # Change to 8M
> upload_max_filesize = 8M              # Change from 2M
> max_file_uploads = 5                  # Change from 20
> expose_php = off                      # Don't display php version

# Restarting nginx doesn't affect this, need to reload php5-fpm
$ service php5-fpm restart

Брандмауэр

Разрешим использовать порт 22 (или текущий порт ssh), 80 и 443 (ssh, веб-трафик, ssl веб-трафик соответственно). Это также разрешит "петлевой" доступ, что важно, если ваш сервер виртуализирован (скорее всего, так и есть).

# Run as root or use sudo
$ sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$ sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT
$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
$ sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
$ sudo iptables -A INPUT -j DROP
$ sudo iptables -I INPUT 1 -i lo -j ACCEPT

# Install and use so firewalls are saved through restarts
$ sudo apt-get install -y iptables-persistent
$ sudo service iptables-persistent start

Добавим пользователя MySQL

Это создаст пользователя MySQL для вашего приложения. Обратите внимание, что это предоставляет все разрешения. Вы должны быть настолько ограничивать права, насколько это возможно, давая только то, что необходимо.

Во многих случаях пользователи MySQL будут в порядке, просто имея привилегии SELECT, UPDATE, DELETE и INSERT, но есть много других привилегий на выбор.

Любому пользователю, которому вы предоставите mysqldump, понадобится привилегия LOCK TABLES.

Также обратите внимание, что если у вас есть база данных MySQL на отдельном сервере, вам необходимо изменить IP-адрес localhost на имя хоста сервера, на котором расположена база данных.

Можно произвести ещё некоторые настройки, чтобы разрешить удалённые подключения в MySQL (Одна из стратегий - редактирование my.cnf bind-address и настройка брандмауэров, чтобы разрешить подключения к MySQL только в одной локальной сети).

$ mysql -u root -p
> CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
> GRANT ALL PRIVILEGES ON database.* TO 'user'@'localhost';

Ещё немного безопасности

Здесь мы сделаем некоторые настройки безопасности.

Во-первых, некоторые провайдеры разрешают root-вход через SSH. Мы хотим выключить это. Я предлагаю открыть новое SSH-соединение сразу после создания пользователя sudo (в отдельном сеансе / окне терминала), прежде чем делать это, на случай, если вы случайно заблокируете себя.

Если ваш провайдер дает вам логин, отличный от «root», то, скорее всего, у вас уже есть пользователь sudo, и вы можете пропустить это. Однако убедитесь, что вы не можете войти в систему как root через SSH.

# Don't let root ssh in
$ adduser mysudouser            # Create user
$ usermod -G sudo mysudouser    # Make user a sudo user (sudoer)

# (Log in and make sure this sudo user does indeed have the sudo permissiosn)

$ sudo vim /etc/ssh/sshd_config 
> PermitRootLogin no            # Change from yes
$ sudo reload ssh

Обычно я также создаю пользователя для развертывания. Этот пользователь будет иметь ту же основную группу, что и Nginx (www-data), и сможет читать / записывать файлы веб-сервера. Это не пользователь sudo.

# Deploy user
$ adduser mydeployuser
$ usermod -g www-data mydeployuser

Web Root

Каталог /var/www/example.com/public является основным (веб-корнем). В нашей конфигурации Nginx будет использовать этот (технически он имеет значение по умолчанию, /usr/share/nginx/www как определено в /etc/nginx/sites-available/default).

Вместо того, чтобы делать этот каталог доступным для редактирования корневым веб-сайтом, мы сделаем его содержимое принадлежащим www-data.

Таким образом, Nginx и пользователь 'deploy' являются единственными, кто может читать / записывать веб-файлы (без прав sudo).

Примечание. Для этого используются групповые разрешения. Далее указано: «Пользователи и группы могут читать и записывать эти файлы, но другие пользователи могут только читать их».

# Assuming /var/www/example.com/public is the web root
$ sudo chown -R www-data:www-data /var/www/example.com # make sure same owner:group
# Remove all group/other permissions
$ sudo chmod -R go-rwx /var/www/example.com
# Add group read/write
$ sudo chmod -R g+rw /var/www/example.com
# Allow other to read only
$ sudo chomd -R o+r /var/www/example.com

Пока это всё - теперь вы имеете возможность работать со стеком LEMP. Я ещё не установил SSL-сертификат на сервер Nginx.


   
Цитата
Поделиться: