[Linux] nginx config 설정
nginx config 설정
기본적인 설정
server {
listen 80; # 리스닝 포트
root /home/project/public; # Document Root
server_name example.com www.example.com; # Domain
error_log /var/log/nginx/example.com.error; # 에러로그
access_log /var/log/nginx/example.com.access main; # 접근로그
location / {
index index.html; # index 파일은 index.html
}
}
SPA 설정일 경우
parameter 존재시 모두 index.html 파일을 참조하도록 설정
SPA(Single Page Application) 일경우 설정법
가령 http://example.com/arg1/arg2... 로 접근할때 모두 index.html 파일을 호출하게 함
server {
........
location / {
index index.html;
try_files $uri $uri/ /index.html$is_args$args;
}
}
PHP 설정
기본설정
server
{
listen 80;
server_name www.example.com;
.....
location / {
root /home/project/www;
index index.html index.php; # index로 index.php 추가 지정
location ~* \.php$ {
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
라라벨 같은 index.php에서 모든 것을 제어하는 것일 경우
위의 SPA 설정 참조
server {
listen 80;
root /home/project/www;
index index.php;
server_name example.com www.example.com;
location / { # 이 부분이 중요하다.
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
기타옵션 적용
server
{
listen 80;
server_name www.example.com;
client_max_body_size 100m; # [optional] 파일 업로드 크기 제한 설정
.....
location / {
root /home/project/www;
index index.html index.php; # index로 index.php 추가 지정
location ~* \.php$ {
# try_files $uri $uri/ =404; # 아래구문 대신 사용 가능
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) { // [optional] 파일이 없을 경우 404 리턴
return 404;
}
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 아래는 옵션으로 expires 을 둚으로서 캐시설정
location ~* \.(?:manifest|appcache|html?|xml|json)$ {
expires -1;
}
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|mp3|ogg|ogv|webm|htc)$ {
expires 1M;
access_log off;
add_header Cache-Control "public";
}
location ~* \.(?:css|js)$ {
expires 1y;
access_log off;
add_header Cache-Control "public";
}
}
강제로 https 로 전환(force redirect to ssl)
server {
listen 80;
server_name example.com www.example.com;
root html;
location / {
return 301 https://example.com$request_uri;
}
}
강제로 www 붙이기
server {
listen 80;
server_name example.com;
root html;
location / {
# return 301 $scheme://www.example.com$request_uri;
return 301 http://www.example.com$request_uri;
}
}
server {
listen 443 ssl;
ssl_certificate /etc/ssl/example.com/example.com.pem;
ssl_certificate_key /etc/ssl/example.com/example.com.key;
server_name example.com;
root html;
location / {
return 301 https://www.example.com$request_uri;
}
}
rewrite
server
{
listen 80;
server_name example.com www.example.com;
rewrite ^ http://www.example.com$request_uri? permanent;
}
ssl 설정시
server
{
listen 443 ssl;
#passenger_enabled off;
#ssl on;
ssl_certificate /etc/ssl/example.com/example.com.pem;
ssl_certificate_key /etc/ssl/example.com/example.com.key;
server_name example.com www.example.com;
error_log /var/log/nginx/example.com.error;
access_log /var/log/nginx/example.com.access;
client_max_body_size 100M;
location /
{
root /home/example/www;
index index.html index.php;
location ~ \.php$ {
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
..........
}
}
proxy 설정
특정 domain을 내부 port로 proxy 설정
저는 nodejs로 서버를 돌릴경우 그 80포터를 nodejs가 사용하는 port로 변경할때 사용
server {
listen 80;
server_name socket.example.com;
access_log /var/log/nginx/example.com.access;
error_log /var/log/nginx/example.com.error;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:3102; # 3102 포터로 돌린다.
proxy_redirect off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_http_version 1.1;
}
}